1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

スクリプトの記述と実行のためのPowershellの実装

2022-01-05 01:31:05

Powershellとは、簡単に言うとPowershellのコードが書かれたテキストファイルです。このテキストファイルを実行すると、Powershellインタプリタがその文を一行ずつ解釈して実行します。Powershellスクリプトは、昔のCMDコンソールのバッチファイルに非常によく似ています。Powershellスクリプトは非常に簡単なテキスト編集ツールで作成することができる。

リダイレクトによるスクリプトの作成

スクリプトがそれほど長くない場合は、コンソールで実行されるステートメントを直接スクリプトファイルにリダイレクトすることも可能です。

PS E:> '"Hello,Powershell Script"' > MyScript.ps1
PS E:> . \MyScript.ps1
Hello,Powershell Script


この方法では、コードを引用符で囲む必要があるという欠点があります。これは、スクリプトの中にも引用符がある場合には面倒なことになります。また、スクリプトの中で改行したい場合もあります。以下はhere-stringsの良い例で、スクリプトファイルが@' '@で閉じられていることを意味します。

PS E:> @'
>> Get-Date
>> $Env:CommonProgramFiles
>> #Script End
>> "files count"
>> (ls).Count
>> #Script Really End
>>
>> '@ > myscript.ps1
>>
PS E:> .MyScript.ps1

Apr 27, 2012 8:15:10
C:\Program Files\Common Files
files count
20



で始まり、'@' で終わる文字列です。ここにはどんなテキストでも、たとえそれが特殊文字、スペース、空白であっても格納することができる。ただし、誤ってシングルクォートをダブルクォートで書いてしまうと、Powershellは中の変数を解析してしまいます。

エディターでスクリプトを作成する

最も本格的なテキストエディタであるメモ帳を、Powershellのコンソールで直接開けるのは、実はとても便利です

PS E:> notepad.exe . \MyScript.ps1
PS E:> notepad.exe


編集後は忘れずに保存してください。

Powershellスクリプトを実行します。

スクリプトが正常に書き込まれたら、以下の手順で初めて実行することができます。

PS E:> MyScript.ps1


項目 "MyScript.ps1" は、コマンドレット、関数、スクリプト ファイル、または実行可能なプログラムの名前として認識されません。が含まれている場合は、名前のスペルを確認してください。
のパスを確認し、パスが正しいことを確認してから、もう一度試してください。
場所 行数:1 文字数:13
+ MyScript.ps1 < <<<
+ CategoryInfo : ObjectNotFound: (MyScript.ps1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

提案[3,一般]。コマンド MyScript.ps1 は見つかりませんでしたが、現在の場所には存在します。 Windows PowerShell の既定値
Windows PowerShellは、デフォルトで現在の場所からコマンドを読み込みません。このコマンドを信頼する場合は、代わりに ".MyScript.ps1" と入力してください。詳細については、"get-h を参照してください。
elp about_Command_Precedence" を参照してください。
相対パス、または絶対パスを使用しない場合

PS E:> . \MyScript.ps1

Apr 27, 2012 8:33:03
C:\Program Files\Common Files
files count
20

PS E:> E:MyScript.ps1

Apr 27, 2012 8:33:11
C:\Program Files\Common Files
files count
20



ポリシーの制限の実施

Powershellは通常、初期化時にスクリプトの実行を無効にします。スクリプトを実行できるかどうかは、Powershellの実行ポリシーに依存します。

PS E:> . \MyScript.ps1


このシステムではスクリプトの実行が無効になっているため、ファイル E:MyScript.ps1 を読み込むことができませんでした。詳細については、"get-help about_sign を参照してください。
ing"です。
ロケーションライン:1 文字:15
+ .MyScript.ps1 < <<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException (ランタイムエクセプション)
このポリシーは管理者のみが変更する権限を持ちます。管理者でない場合は、エラーが報告されます。

でスクリプト実行ポリシーを確認することができます。

PS E:> Get-ExecutionPolicy


スクリプトの実行ポリシーの変更は

PS E:> Get-ExecutionPolicy
Restricted
PS E:> Set-ExecutionPolicy UnRestricted


ポリシー変更の実行

実行ポリシーは、信頼されていないスクリプトの実行を防ぐことができます。実行ポリシーを変更すると、about_Execution_Policies に公開されることがあります。
のセキュリティリスクは、ヘルプトピックで説明されているとおりです。実行ポリシーを変更した方が良いですか?
[Y] Yes(Y) [N] No(N) [S] Pending(S) [?] Help (初期値は "Y"): y
スクリプト実行ポリシーの種類は Microsoft.PowerShell。
サポートされているすべての実行ポリシーを表示する。

PS E:> [System.Enum]::GetNames([Microsoft.PowerShell.ExecutionPolicy])を実行します。
制限なし
リモート署名
AllSigned
制限あり
デフォルト
バイパス
未定義
Unrestricted(制限なし)。任意のスクリプトを無制限に実行できる最高権限です。
Default:Powershellのデフォルトのポリシーです。スクリプトの実行を一切許可しない「Restricted」。
AllSignedです。すべてのスクリプトは、実行する前に署名されている必要があります。
RemoteSignedです。ローカルスクリプトには制約がありませんが、ネットワークからのスクリプトには署名が必要です。

Powershellスクリプトの署名については、後で詳しく説明します。

スクリプトをコマンドのように実行する

スクリプトへの相対パスや絶対パス、*.ps1拡張子を入力することなく、スクリプトをコマンドのように実行する方法です。
そして、スクリプトの実行文をエイリアスとして保存します。

PS E:> Set-Alias Invoke-MyScript .MyScript.ps1
PS E:> Invok-MyScript

Mon, 28 Apr 2012 0:24:22
C:\Program Files\Common Files
files count
20