hakeの日記

Windows環境でプログラミングの勉強をしています。

PowerShell - 実行環境の設定、その他

次期のWindowsのアップデートでデフォルトがコマンドプロンプトからPowerShellに代わるそうなので学習開始です。

実行ポリシーの変更

デフォルトでは実行できなようになっている為、実行ポリシーを変更する必要がある。

コマンドプロンプト上で以下の様に実行、foo.ps1がPowerShellスクリプト

C:\>powershell -ExecutionPolicy RemoteSigned .\foo.ps1
  • 恒久的な変更

管理者権限でPowerShellを起動して

PS C:\> Get-ExecutionPolicy
Restricted
PS C:\> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y
PS C:\> Get-ExecutionPolicy
RemoteSigned

PowerShellのバージョン確認

自宅のWindows 10ではバージョン5.1、職場のWindows 7ではバージョン2.0

PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14393.576
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.576
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\> $PSVersionTable.PSCompatibleVersions

Major  Minor  Build  Revision
-----  -----  -----  --------
1      0      -1     -1
2      0      -1     -1
3      0      -1     -1
4      0      -1     -1
5      0      -1     -1
5      1      14393  576

低バージョンモードの起動

バージョンアップする毎に機能が追加されているようです。そのため家のWindows 10で動作したスクリプトが職場のWindows 7では動作しない場合もあるため、低(旧)バージョンでPowerShellを起動して確認する必要があります。
コマンドプロンプトから

C:\>powershell -v 2

または、PowerShellのショートカットのプロパティのリンク先に「-v 2」を追加する。

コマンドレットのヘルプ

PS C:\> Get-Help コマンドレット名

設定されているエイリアスの表示

コマンドプロンプトUnix系の基本コマンド名として類似のコマンドレットが既に割り当てられている。

PS C:\> Get-Alias  または
PS C:\> alias

以下は抜粋

CommandType     Name
-----------     ----
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           cat -> Get-Content
Alias           cd -> Set-Location
Alias           chdir -> Set-Location
Alias           clear -> Clear-Host
Alias           copy -> Copy-Item
Alias           cp -> Copy-Item
Alias           cpi -> Copy-Item
Alias           del -> Remove-Item
Alias           diff -> Compare-Object
Alias           dir -> Get-ChildItem
Alias           echo -> Write-Output
Alias           kill -> Stop-Process
Alias           ls -> Get-ChildItem
Alias           man -> help
Alias           md -> mkdir
Alias           move -> Move-Item
Alias           mv -> Move-Item
Alias           pwd -> Get-Location
Alias           rm -> Remove-Item
Alias           rmdir -> Remove-Item
Alias           write -> Write-Output