2014年6月22日日曜日

[Powershell] プロセスを停止してからシャットダウンする

コンピュータをシャットダウンする前に、iTuneなどを停止していないとシャットダウン中に「プログラムが動いている」と警告がでてシャットダウン処理がそこで一時停止してしまいます。

なので、Powershellで止めたいプロセスを先に止めてからシャットダウンを行うスクリプトを作りました。


# シャットダウン前に停止したいプロセスを列挙する
$RunningProcesses = ("iTunes","LINE","LYNC","OUTLOOK","EXCEL","WINWORD")

# 列挙したプロセスを停止する
foreach ($Process in $RunningProcesses){
    if (Get-Process | Where-Object {$_.ProcessName -eq $Process})
        {Stop-Process -Name $Process}
 }

# コンピュータをシャットダウンする 
Stop-Computer -Force


スクリプトを以下のようなバッチファイルで動かせば途中で止まらずにシャットダウンができます。

echo off
echo これからコンピュータをシャットダウンします。
echo Enterを3回押してください。
echo on
pause
pause
pause
Powershell -Command "C:\PowershellScripts\Shutdown.ps1"

2014年6月20日金曜日

[Powershell DSC] Windows 8.1でPowershell Desired State Configurationをとりあえず動かしてみた

Powershell DSC (Desired State Configuration)をWindows 8.1でとりあえず、何でもいいから動かしたかった。

サイトによくあるサンプルはIISのインストール・設定が多いがクライアントPCにIISを入れても全然うれしくないので他のサンプルを当たることに。以下はそのメモになります。

やってみたこと


① とりあえず以下のサンプルコードを作ってみたった

以下のスクリプトを"C:\PowershellScripts\PSS_DSC_zip.ps1"に保存。実行すると、"C:\PowershellScripts\test.zip"を解凍して"C:\Temp2"に展開します。
正直、まだ十分勉強していないので以下のスクリプトが正しい自信は無いです。

Configuration Filecopy
{
   Node "localhost"
   {

        Archive ArchiveExample {
            Ensure = "Present"  # You can also set Ensure to "Absent"
            Path = "C:\PowershellScripts\test.zip"
            Destination = "C:\Temp2"
        } 

    }

}

Filecopy -OutputPath . 
Start-DscConfiguration -Path .\Filecopy -Wait -Verbose

② Powershell DSC を使うためには一度"Enable-PSRemoting"を実行しないといけないらしい。

早速、実行したらエラーになりました。



PS C:\PowershellScripts> C:\PowershellScripts\PSS_DSC_zip.ps1


    ディレクトリ: C:\PowershellScripts\Filecopy



Mode                LastWriteTime     Length Name                                                                                                                             


----                -------------     ------ ----                                                                                                                             

-a---        2014/06/19     22:17       1280 localhost.mof                                                                                                                    
詳細: パラメーター ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration' を使用して操作 'CimMethod の呼び出し' を実行します。
クライアントは、要求で指定された接続先に接続できません。 接続先のサービスが実行されていて、要求を受け付けられる状態であることを確認してください。 接続先で実行されている WS-Management サービス (通常は IIS または WinRM) に関するログとドキュメントを参照してください。 接続先が WinRM サービスの場合は、リモート 
ホスト上で次のコマンドを実行して、WinRM サービスを分析および構成してください: "winrm quickconfig"
    + CategoryInfo          : 接続エラー: (root/Microsoft/...gurationManager: String) []、CimException
    + FullyQualifiedErrorId : HRESULT 0x80338012
    + PSComputerName        : localhost

詳細: 操作 'CimMethod の呼び出し' が完了しました。
詳細: 構成ジョブが完了するまでにかかった時間は 6.058 秒です


ここで"Enable-PSRemoting -Force"を実行



PS C:\PowershellScripts> Enable-PSRemoting -Force
WinRM は要求を受信するように更新されました。
WinRM サービスの種類を正しく変更できました。 
WinRM サービスが開始されました。 

WinRM はリモート管理用に更新されました。

このコンピューター上のあらゆる IP への WS-Man 要求を受け付けるため、HTTP://* 上に WinRM リスナーを作成しました。 
WinRM ファイアウォールの例外を有効にしました。 
ローカル ユーザーにリモートで管理権限を付与するよう LocalAccountTokenFilterPolicy を構成しました。 


これを実行したらうまくいくようになりました。


PS C:\PowershellScripts> C:\PowershellScripts\PSS_DSC_zip.ps1


    ディレクトリ: C:\PowershellScripts\Filecopy



Mode                LastWriteTime     Length Name                                                                                                                             

----                -------------     ------ ----                                                                                                                             
-a---        2014/06/19     22:19       1280 localhost.mof                                                                                                                    
詳細: パラメーター ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration' を使用して操作 '
CimMethod の呼び出し' を実行します。
詳細: コンピューター URANUX-WIN8、ユーザー SID S-1-5-21-4205703447-7355389-1786604373-1001 から LCM メソッドが呼び出されました。
詳細: [URANUX-WIN8]: LCM:  [ 開始     設定       ]
詳細: [URANUX-WIN8]: LCM:  [ 開始     リソース     ]  [[Archive]ArchiveExample]
詳細: [URANUX-WIN8]: LCM:  [ 開始     テスト      ]  [[Archive]ArchiveExample]
詳細: [URANUX-WIN8]:                            [[Archive]ArchiveExample] The destination file C:\Temp2\PowershellScripts\CompareAcl.ps1 was missing or was not a file
詳細: [URANUX-WIN8]:                            [[Archive]ArchiveExample] The destination file 
詳細: [URANUX-WIN8]: LCM:  [ 終了     テスト      ]  [[Archive]ArchiveExample]  5.7380 秒かかりました。
詳細: [URANUX-WIN8]: LCM:  [ 開始     設定       ]  [[Archive]ArchiveExample]
詳細: [URANUX-WIN8]:                            [[Archive]ArchiveExample] The configuration of MSFT_ArchiveResource is starting
詳細: [URANUX-WIN8]:                            [[Archive]ArchiveExample] The archive at C:\PowershellScripts\test.zip was unpacked to destination C:\Temp2
詳細: [URANUX-WIN8]:                            [[Archive]ArchiveExample] The configuration of MSFT_ArchiveResource has completed
詳細: [URANUX-WIN8]: LCM:  [ 終了     設定       ]  [[Archive]ArchiveExample]  0.2520 秒かかりました。
詳細: [URANUX-WIN8]: LCM:  [ 終了     リソース     ]  [[Archive]ArchiveExample]
詳細: [URANUX-WIN8]: LCM:  [ 終了     設定       ]
詳細: [URANUX-WIN8]: LCM:  [ 終了     設定       ]    (6.3300 秒)。
詳細: 操作 'CimMethod の呼び出し' が完了しました。
詳細: 構成ジョブが完了するまでにかかった時間は 6.393 秒です



とりあえず動いた。よかった。よかった。

解凍されるファイルの一覧が表示され、指定通りにファイルが解凍されたのが確認できました。