#contents
----
* リンク [#Link]
- [[PowerShell リファレンス:https://msdn.microsoft.com/powershell/reference/readme]]
-- [[Compress Archive:https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.archive/compress-archive]]
-- [[Expand Archive:https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.archive/expand-archive]]

* スクリプトの実行許可 [#SetExecutionPolicy]
- 管理者権限で PowerShell を起動し、Set-ExecutionPolicy コマンドレットで設定する。
#code(powershell){{{{
> Set-ExecutionPolicy RemoteSigned
}}}}
- Visual Studio の外部ツールとして PowerShell を起動する場合は、x86 版の PowerShell についてスクリプトの実行許可を設定しておく。
 %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

- [[Set-ExecutionPolicy コマンドレットの使用:http://technet.microsoft.com/ja-jp/library/ee176961.aspx]]
- [[PowerShellスクリプトの実行セキュリティ・ポリシーを変更する - @IT:http://www.atmarkit.co.jp/fwin2k/win2ktips/1023ps1sec/ps1sec.html]]
- [[PowerShell CmdLet as Visual Studio External Tool - Stack Overflow>Stackoverflow:3983215]]

* 起動設定 [#Profile]
- 「プロファイル」に設定を記述しておくことで、起動時にモジュール登録等を自動的に行える。
- プロファイルの場所の確認
#code(powershell){{{{
> $profile
}}}}
- プロファイルの再適用
#code(powershell){{{{
> . $profile
}}}}
- サンプル Microsoft.PowerShell_profile.ps1
#code(powershell){{{{
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")
}}}}

- [[Windows PowerShell プロファイル:http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner06.aspx]]

* TCP/UDP ポートを使用しているプロセスをリストアップ [#CheckProcessUsingPort]
- &ref(checkUsingPort.zip);
#code(powershell){{{{
# 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:http://xcud.com/post/5872186891/get-networkstatistics-or-netstat-for-powershell]]
-- 予めモジュールとして登録しておいて使う。
#code(powershell){{{{
> Import-Module Get-NetworkStatistics.psm1
> Get-NetworkStatistics | Format-Table
> Get-NetworkStatistics  | Sort-Object ProcessName | Format-Table
}}}}
- [[TCPView for Windows:http://technet.microsoft.com/ja-jp/sysinternals/bb897437]]
- [[Get-Netstat 1,1:http://poshcode.org/560]] @ [[PowerShell Code Repository:http://poshcode.org/]]

* 管理者権限の確認 [#CheckAdminPrivilege]
#code(powershell){{{{
$identity = [Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()
If (-NOT $identity.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
  Write-Warning "管理者権限がありません。管理者として再実行してください。"
  Break
}
Write-Host "管理者です。"
}}}}
- [[Check for Admin Credentials in a PowerShell Script – Hey, Scripting Guy! Blog:https://blogs.technet.microsoft.com/heyscriptingguy/2011/05/11/check-for-admin-credentials-in-a-powershell-script/]]

* システム情報の表示 [#ShowSystemInfo]
- [[GitHub:TakeAsh/ps-SystemInfo]]
-- システム情報の表示。
-- ネットワークの変更(Public/Private)。

- [[コンピューターに関する情報の収集:https://msdn.microsoft.com/ja-jp/powershell/scripting/getting-started/cookbooks/collecting-information-about-computers]]
#code(powershell){{{{
> 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):https://msdn.microsoft.com/en-us/library/aa389273.aspx]]
-- [[Win32_Processor class (Windows):https://msdn.microsoft.com/en-us/library/aa394373.aspx]]
-- [[Win32_PhysicalMemory class (Windows):https://msdn.microsoft.com/en-us/library/aa394347.aspx]]
-- [[Win32_DiskDrive class (Windows):https://msdn.microsoft.com/en-us/library/aa394132.aspx]]
-- [[Win32_IP4PersistedRouteTable class (Windows):https://msdn.microsoft.com/en-us/library/aa394161.aspx]]
- [[Operating System Classes (Windows):https://msdn.microsoft.com/en-us/library/dn792258.aspx]]
-- [[Win32_LogicalDiskToPartition class (Windows):https://msdn.microsoft.com/en-us/library/aa394175.aspx]]
- [[Get-WindowsOptionalFeature:https://docs.microsoft.com/en-us/powershell/module/dism/get-windowsoptionalfeature]]
#code(powershell){{{{
Get-WindowsOptionalFeature -Online |
  Sort-Object -Property FeatureName |
  Format-Table -AutoSize -Property FeatureName, State, RestartNeeded
}}}}
- [[PowerShellでOSの基本情報を取得する - Windowsインフラ管理者への道:http://ebi.dyndns.biz/windowsadmin/2012/01/15/powershell%E3%81%A7os%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/]]
- [[PowerShell の コマンドレット例外を取得する - tech.guitarrapc.cóm:http://tech.guitarrapc.com/entry/2013/07/22/000738]]
- [[インストール済みのWindows Serverの役割と機能を一覧するPowerShellコマンド - YOMON8.NET:http://yomon.hatenablog.com/entry/2014/11/11/170524]]
- [[Windows 10 の役割を PowerShell で有効/無効にする:http://www.vwnet.jp/Windows/w10/WindowsOptionalFeature.htm]]
- [[Windows Server 2012/2012R2 上で、「ディスク クリーンアップ」が欲しい! - Kurochin’s Mind Control Web Site:https://kurodayk.wordpress.com/2015/09/03/windows-server-20122012r2-%E4%B8%8A%E3%81%A7%E3%80%81%E3%80%8C%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%80%8D%E3%81%8C%E6%AC%B2/]]
- [[Match physical drives to volume labels with PowerShell – 4sysops:https://4sysops.com/archives/match-physical-drives-to-volume-labels-with-powershell/]]
- [[【自分用メモ】PowerShellによるIPアドレスの設定及び変更 - Qiita:http://qiita.com/hanakara_milk/items/1197ac9b91fa1fa3abab]]
- [[PowerShell: ◆メモリーサイズを調べる:http://mtgpowershell.blogspot.jp/2010/12/blog-post_13.html]]
- [[morituriのブログ : powershellでルーティングテーブルを表示:http://blog.livedoor.jp/morituri/archives/51650812.html]]
- [[インストールされている全ての .NET Framework のバージョンを列挙する - Qiita:http://qiita.com/asterisk9101/items/f13da78b4cb9ab6d3c4b]]
- [[Use PowerShell to Modify Your Environmental Path – Hey, Scripting Guy! Blog:https://blogs.technet.microsoft.com/heyscriptingguy/2011/07/23/use-powershell-to-modify-your-environmental-path/]]

* IP アドレスの表示 [#ShowIpAddr]
#code(powershell){{{{
Get-NetIPAddress |
  Sort-Object -Property InterfaceAlias, AddressFamily, IPAddress |
  Format-Table -Property InterfaceIndex, InterfaceAlias, AddressFamily, IPAddress
}}}}

- [[Get-NetIPAddress:https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-netipaddress]]
- [[Set-NetIPAddress:https://docs.microsoft.com/en-us/powershell/module/nettcpip/set-netipaddress]]
- [[New-NetIPAddress:https://docs.microsoft.com/en-us/powershell/module/nettcpip/new-netipaddress]]
- [[Remove-NetIPAddress:https://docs.microsoft.com/en-us/powershell/module/nettcpip/remove-netipaddress]]

* イベントログ [#EventLog]
- イベントログを記録するには事前にイベントソースを登録しておく必要がある。
- 登録済みのイベントソースを全てリストアップ。(Application, 管理者権限不要)
#code(powershell){{{{
Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application |
  Select-Object PSChildName
}}}}
- 登録済みのイベントソースで「v」から始まる名前のものをリストアップ。
#code(powershell){{{{
Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\Application |
  ?{ $_.PSChildName.ToLower().StartsWith("v")} |
  Select-Object PSChildName
}}}}
- 新規イベントソース登録 (要管理者権限)
#code(powershell){{{{
New-EventLog -Source "MyApp1" -LogName "Application"
}}}}
- イベントソース削除 (要管理者権限)
#code(powershell){{{{
Remove-EventLog -Source "MyApp1"
}}}}

- [[New-EventLog:https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.management/new-eventlog]]
- [[Remove-EventLog:https://msdn.microsoft.com/ja-jp/powershell/reference/5.1/microsoft.powershell.management/remove-eventlog]]

* レジストリ読み書き [#RegistryReadWrite]
- [[GitHub:TakeAsh/ReadWriteRegistry]]
- [[Get-ItemProperty:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-itemproperty]]
- [[Set-ItemProperty:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-itemproperty]]
- [[PowerShellでレジストリ情報を操作する - @IT:http://www.atmarkit.co.jp/fwin2k/win2ktips/1030psreg/psreg.html]]

* タスクスケジューラーの操作 [#TaskScheduler]
- [[ScheduledTasks:https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/]]


リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS