2013-12-25

概要

WindowsPowerShell

WSHの後継となることを目標に開発された、Windowsのシェル。
オブジェクト指向で、かつ.NET Frameworkの資産がそのまま利用できるのが特徴。

Windows XP, Vista, 2003, WindowsServer 2008向けに初代のv1がリリースされた。
しかしv1はバックグラウンドジョブ実行やリモート実行ができなかったり、ActiveDirectoryへの対応が不完全だったりと、満足できるものではなかった。
のちに、Windows 7, WindowsServer 2008R2を対象としてv2がリリースされた。
Windows 8, 8.1ではv3、Windows 10ではv5がリリースされている。

PowerShellCore

WindowsPowerShellはWindowsの.NET Framework上で動作する前提で作られいた。
これをCLRのMicrosoft Windows以外の実装(.NET Core)で動作させるべく開発されたのがPowerShellCore。

言語仕様はWindowsPowerShellとあまり変わらないが、「Windows以外」の意識が強く、WMIやCOMをはじめWindows特有の機能は当然つかえなかったり
WindowsPowerShell v1の機能で後に非推奨となった技術(SnapIn等)は実装されていない。

準備

インストールについて

サーバOSではWindowsServer 2008R2以降、クライアントOSではWindows7に以降については標準でインストールされている
それ以前のOSではMicrosoftのホームページよりダウンロードしインストールする必要がある

スクリプト実行の許可

デフォルトでは、セキュリティポリシーによりスクリプトファイル(.ps1)をそのまま実行することができない

.\script.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル D
:\Users\user\Desktop\script.ps1 を読み込むことができません。詳細については、
「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=13
5170) を参照してください。

策1:PowerShellをExecutionPolicyを指定して起動

#sh(ruby){{

powershell.exe -ExecutionPolicy RemoteSigned -File ./path/to/script.ps1 -Arg1 -Arg2

}}

策2:自分だけExecutionPolicyを変える

#sh(ruby){{

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope CurrentUser

}}

自分だけ、今後ずっと指定したExecutionPolicyになる。
(他のユーザは影響なし)

策3:PowerShellのデフォルトのExecutionPolicyを変更する

管理者権限でPowerShellを実行し、以下のコマンドを入力する

#sh(bash){{

Set-ExecutionPolicy RemoteSigned -Force

}}

PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned -Force

ポリシーがRemoteSignedに変更されていることを確認して終了

#sh(bash){{

Get-ExecutionPolicy
# RemoteSigned

}}

なお、管理者権限でない状態でSet-ExecutionPolicyを実行すると、下記のようなエラーが発生する

Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Po
werShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。
発生場所 行:1 文字:1
+ Set-ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-ExecutionPolicy], Unautho
   rizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.Pow
   erShell.Commands.SetExecutionPolicyCommand

スクリプトの実行方法

PowerShellはセキュリティを非常に注意して設計されており、スクリプトファイルをクリックして実行することを禁止している
そのため、PowerShellのプロンプトを起動し、コマンドを実行する必要がある

また、カレントフォルダに存在するスクリプトファイルも、必ず下記のようにディレクトリから指定しなければ実行することができない

#sh(bash){{

.\sample.ps1

}}

経験的には

展開先のマシンでRemoteSignedになっているとは限らないので、上記の策1でやったように、powershellの引数にExecutionPolicyを指定して起動させるのが確実。

呼び出す元の.batファイル

#sh(bash){{

@echo off

cd /d %~dp0

%~d

powershell.exe -ExecutionPolicy RemoteSigned -File ./powershell_script.ps1

}}

呼び出される.ps1ファイル

#sh(ruby){{

Set-PSDebug -Strict;

Write-Host -Object "Sample powershell script.";

}}

仕様

演算子

文法

定数

コマンドレット

.NETオブジェクトの初期化

New-Object 型 コンストラクタ引数の順で引数を与える

#sh(bash){{

$obj = New-Object System.Int32 100
# obj = 100

}}

COMオブジェクトの初期化

#sh(bash){{

# Shellの例
$obj = New-Object -ComObject Shell.Application;

}}

サンプル

関連ページ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-10-03 (木) 21:37:18