スクリプトの実行許可
• スクリプトの実行やコンフィグレーションのロード
• 実行ポリシー (Execution Policy) によって制御される
• 既定値では、スクリプトの実行が禁止されている
– Windows Server 2012 R2 以外
• 実行ポリシーの確認と変更
• Get-ExecutionPolicy / Set-ExecutionPolicy
• グループポリシーによる設定
– コンピューターポリシー / ユーザーポリシー
• PowerShell 起動時のオプションで指定
– powershell.exe -ExecutionPolicy <Policy>
実行ポリシー
• 実行ポリシーは以下の 6 種類 (5 段階 + “未定義”)
• Restricted : スクリプトの実行を禁止する
• AllSigned : 有効な署名付きのスクリプトのみ実行可能
• RemoteSigned : ローカルのスクリプトは無条件に実行可能
リモートから取得したスクリプトには署名が必要
• Unrestricted : スクリプトは実行可能 (一部警告表示あり)
• Bypass : スクリプトは実行可能 (警告表示なし)
• Undefined : 未定義
• 規定値は Undefined
• Windows Server 2012 R2 のみ RemoteSigned (LocalMachine Scope)
• 全てのスコープで Undefined の場合、Restricted とみなされる
実行ポリシーのスコープ
• 実行ポリシーはスコープごとに設定可能
• MachinePolicy : グループポリシーによる設定 (Computer)
• UserPolicy : グループポリシーによる設定 (User)
• Process : 実行中の PowerShell セッション内のみ有効
• CurrentUser : ログインユーザーの設定 (レジストリに格納)
• LocalMachine : ローカルコンピューターの設定 (レジストリに格納)
• 上位スコープの設定が優先される
• 基本的には管理者権限で設定を行う
• Process / CurrentUser スコープは一般ユーザー権限で設定変更可能
• LocalMachine スコープでスクリプト実行を禁止していても、Process ス コープで実行を許可することで、一時的なスクリプトの実行が可能
リモート接続の構成
• リモート コンピューターへ接続して操作を行う
• WS-Management を使用してリモートコンピューターの WinRM (Windows Remote Management) サービスへ接続する
• 事前にリモート接続の構成が必要
– Windows Server 2012 R2 では、同一セグメントからのリモート接続が デフォルトで許可されている
• とりあえず接続したい場合は以下を実行 (検証環境向け)
– 接続先 : Enable-PSRemoting -Force
– 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value * – 本番環境へ適用する際は、設定の意味を理解してセキュリティを考慮する
• Get-Help about_Remote
– http://technet.microsoft.com/en-us/library/hh847900.aspx
リモート接続の要件
• リモート接続の要件を満たすようコンピューターを構成する
• WinRM サービスが起動している
• WinRM のエンドポイントが適切に構成されている
• Windows Firewall やその他の Firewall 製品で通信が許可されている
– ネットワークロケーションがパブリック ネットワークの場合、PowerShell の バージョン / OS によって Enable-PSRemoting の挙動が異なるので注意
• 接続先コンピューターの Administrators グループに所属しているか、
権限が適切に構成されている
• 接続先に対する資格情報の送信が許可されている
– ドメインに参加しているか、TrustedHosts が適切に構成されている
• Get-Help about_Remote_Requirements
– http://technet.microsoft.com/en-us/library/hh847859.aspx
リモート接続時の注意点
• PowerShell のバージョンによりセッションの扱いが異なる
• PowerShell 2.0 / WinRM 2.0 では接続元側でセッション情報を保持
• PowerShell 3.0 / WinRM 3.0 以降は接続先側でセッション情報を保持
– セッションを切断し、別の接続元から同一のセッションへ再接続が可能
• トラブルが少ない構成
• ドメイン環境
• Domain Admins グループのユーザーを使用
• WMF (Windows Management Framework) 3.0 (PowerShell 3.0 / WinRM 3.0) 以降を使用
実行方法
• ユーザーが任意に実行
• スクリプトファイルを powershell.exe から実行
• 登録されたタスクを手動実行
• 決められた時刻に自動実行(スケジュールタスク)
• タスクスケジューラに登録
• 特定の状態に変化したら実行(イベント)
• イベントトリガーで実行
タスクスケジューラからスクリプトを実行
• タスクスケジューラにタスクを登録
• 実行するコマンド(実行ファイル)は powershell.exe
• -Command “<script path>” を指定
• 実行ユーザーに注意する
• スクリプト内の処理を実行する権限があるか
– 特権モード、所属グループ、NTFS ACL、委任、etc...
• 保存された Credential を使用する場合は、実行ユーザーで Credential が 保存されているか
• 実行環境(プロファイル)に問題はないか
– プロファイル、UAC、etc...
Azure の操作を自動化
• Azure サービスのコントロール
• Azure PowerShell を使用
• 仮想マシン内の OS のコントロールは、通常の OS と同様
• サービスコントロール用の認証情報
• Add-AzureAccount ではなく、Get-AzurePublishSettingsFile を使う
– Azure Active Directory 認証ではなく、証明書認証 – Azure AD の認証は 12 時間で Expire するので注意
– 証明書であれば、証明書の有効期限(かつ、サブスクリプションの有効期限)
まで利用可能