Table of Contents
リンク
スクリプトの実行許可
- 管理者権限で PowerShell を起動し、Set-ExecutionPolicy コマンドレットで設定する。
> Set-ExecutionPolicy RemoteSigned
Visual Studio の外部ツールとして PowerShell を起動する場合は、x86 版の PowerShell についてスクリプトの実行許可を設定しておく。
%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
- PowerShellスクリプトの実行セキュリティ・ポリシーを変更する - @IT
- PowerShell CmdLet as Visual Studio External Tool - Stack Overflow
起動設定
- 「プロファイル」に設定を記述しておくことで、起動時にモジュール登録等を自動的に行える。
- プロファイルの場所の確認
> $profile
- プロファイルの再適用
> . $profile
サンプル Microsoft.PowerShell_profile.ps1
function prompt() { $env:USERNAME + "@" + $env:COMPUTERNAME + " " + (Split-Path (Get-Location) -Leaf) + "> " } $currentDir = Split-Path $MyInvocation.MyCommand.Path Import-Module (Join-Path $currentDir "Get-NetworkStatistics.psm1")
TCP/UDP ポートを使用しているプロセスをリストアップ
# TCP/UDP ポートを使用しているプロセスをリストアップする。 # Get-NetTCPConnection 不使用 $running_proc = @{} foreach( $proc in Get-Process ){ $running_proc[ $proc.Id ] = $proc.ProcessName } $re = "^\s*(?<proto>\S+)\s+(?<lhost>\S+):(?<lport>[^:\s]+)\s+" $re += "(?<rhost>\S+):(?<rport>[^:\s]+)\s+(?<stat>\S*)\s+(?<pid>\d+)$" $regex = [regex] $re $using_ports = @{} $ports = netstat -ao | Select-String "TCP|UDP" foreach( $line in $ports ){ $m = $regex.Matches( $line ) if ( $m[0].Success ){ $id = 0 [void][int]::TryParse( $m[0].Groups["pid"].Value, [ref]$id ) $name = $running_proc[ $id ] + " (PID: " + $id + ")" if ( ! $using_ports[ $name ] ){ $using_ports[ $name ] = @{} } $port = $m[0].Groups["proto"].Value + "/" + $m[0].Groups["lport"].Value $using_ports[ $name ][ $port ] = $m[0].Groups["stat"].Value } } foreach( $name in ( $using_ports.Keys | sort ) ){ write-host "${name}" foreach( $port in ( $using_ports[ $name ].Keys | sort ) ){ $status = $using_ports[ $name ][ $port ] write-host "`t${port}`t${status}" } } # EOF
-
Get-NetworkStatistics (or 'netstat' for PowerShell) - xcud
- 予めモジュールとして登録しておいて使う。
> Import-Module Get-NetworkStatistics.psm1 > Get-NetworkStatistics | Format-Table > Get-NetworkStatistics | Sort-Object ProcessName | Format-Table
- 予めモジュールとして登録しておいて使う。
- TCPView for Windows
- Get-Netstat 1,1 @ PowerShell Code Repository
管理者権限の確認
#Requires -RunAsAdministrator
$identity = [Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()
If (-not $identity.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Warning '管理者権限がありません。管理者として再実行してください。'
Break
}
Write-Host '管理者です。'
システム情報の表示
-
- システム情報の表示。
- ネットワークの変更(Public/Private)。
> Get-WmiObject -class Win32_BIOS | Select-Object -Property [a-z]* > Get-WmiObject -class Win32_ComputerSystem | Select-Object -Property [a-z]* > Get-WmiObject -class Win32_IP4PersistedRouteTable | Format-Table -AutoSize -Property Destination, Mask, NextHop, Metric1
- Computer System Hardware Classes (Windows)
- Operating System Classes (Windows)
-
Get-WindowsOptionalFeature
Get-WindowsOptionalFeature -Online | Sort-Object -Property FeatureName | Format-Table -AutoSize -Property FeatureName, State, RestartNeeded
- PowerShellでOSの基本情報を取得する - Windowsインフラ管理者への道
- PowerShell の コマンドレット例外を取得する - tech.guitarrapc.cóm
- インストール済みのWindows Serverの役割と機能を一覧するPowerShellコマンド - YOMON8.NET
- Windows 10 の役割を PowerShell で有効/無効にする
- Windows Server 2012/2012R2 上で、「ディスク クリーンアップ」が欲しい! - Kurochin’s Mind Control Web Site
- Match physical drives to volume labels with PowerShell – 4sysops
- 【自分用メモ】PowerShellによるIPアドレスの設定及び変更 - Qiita
- PowerShell: ◆メモリーサイズを調べる
- morituriのブログ : powershellでルーティングテーブルを表示
- インストールされている全ての .NET Framework のバージョンを列挙する - Qiita
- Use PowerShell to Modify Your Environmental Path – Hey, Scripting Guy! Blog
IP アドレスの表示
Get-NetIPAddress |
Sort-Object -Property InterfaceAlias, AddressFamily, IPAddress |
Format-Table -Property InterfaceIndex, InterfaceAlias, AddressFamily, IPAddress
イベントログ
- イベントログを記録するには事前にイベントソースを登録しておく必要がある。
- 登録済みのイベントソースを全てリストアップ。(Application, 管理者権限不要)
Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application | Select-Object PSChildName
- 登録済みのイベントソースで「v」から始まる名前のものをリストアップ。
Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application | ?{ $_.PSChildName.ToLower().StartsWith("v")} | Select-Object PSChildName
- 新規イベントソース登録 (要管理者権限)
New-EventLog -Source "MyApp1" -LogName "Application"
イベントソース削除 (要管理者権限)
Remove-EventLog -Source "MyApp1"
- Remove-EventLog
レジストリ読み書き
タスクスケジューラーの操作
既存タスクの有効化/無効化
# タスク有効化/無効化
#Requires -RunAsAdministrator
# 指定パス内の全タスクを有効化
$taskPath = '\Test1\'
Get-ScheduledTask -TaskPath $taskPath |
ForEach-Object { Enable-ScheduledTask -TaskPath $_.TaskPath -TaskName $_.TaskName } |
Format-Table -AutoSize
# 指定タスクを無効化
@(
@('\Test1\', 'テスト_コピー'),
@('\Test1\', 'テスト_バックアップ')
) | ForEach-Object { Disable-ScheduledTask -TaskPath $_[0] -TaskName $_[1] } |
Format-Table -AutoSize
ファイアウォールの操作
SSH-Agent サービスの有効化
# Make sure you're running as an Administrator
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent