別のマシンで、コマンドラインからIIS7アプリプールをリサイクルすることはできますか?
APPCMD(appcmd recycle apppool my-app-pool
)、しかしそれはそれが実行されているホスト、AFAICTでのみ動作します。
Powershellでそれを行う方法があるかもしれないという噂を聞いたが、私はそれについて何も知らず、どうやらそれについてグーグルするのは得意ではないようだ。
必要に応じて、Vista/Server 2008を使用しています。
編集:誰かがAPPCMD自体を実行できると主張している WinRM と呼ばれるものを見つけましたが、正確な方法はまだわかりません。
ケン、これをCMDから実行する場合は PSExec で実行できます。これには、アクセスするサーバーにインストールする必要はありません。
Zip の内容をSystem32ファイルにコピーするだけです(ELUAやリモートFROMするコンピューターのDLLファイルは含めないでください)。
次に CMDを入力
タイプPsexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool
ドメイン管理者アカウントの同じドメインにいない場合は、管理アクセス用の資格情報を入力する必要があります。詳細については、引数なしのコマンドラインで単にpsexecと入力してください。
PowerShellからリモートで実行するには、PowerShellリモート処理を使用するか、WMIを使用する必要があります。
これは、Invoke-WMIMethod PowerShellコマンドレットを使用すると実際には非常に簡単ですが、_-Authentication PacketPrivacy
_ ...を指定する必要があります。別の資格情報を指定する必要がある場合は、パラメーター-Credential (Get-Credential)
...を使用して実行できます。ここに例があります:
_$pc = "serverName"
## List the app pools, note the __RELPATH of the one you want to kill:
Get-WMIObject IISApplicationPool
-Computer $pc
-Namespace root\MicrosoftIISv2
-Authentication PacketPrivacy
## Recycle a specific one:
$Name = "W3SVC/APPPOOLS/ASP.NET v4.0 Classic" ## This is the Name from above
$Path = "IISApplicationPool.Name='$Name'" ## This is the __RELPATH
Invoke-WMIMethod Recycle
-Path $Path
-Computer $pc
-Namespace root\MicrosoftIISv2
-Authentication PacketPrivacy
_
それをすべてまとめるために、Nice関数を作成しました。 http://poshcode.org/2466
コマンドラインを選択する場合は、 PsExec が解決策のようですが、ミッションクリティカルなタスクの場合はお勧めしません。その理由は次のとおりです。PsExecには problems があり、複数回実行されます。
私はそのような目的でAPIを使用することを好みます。
@Jeffの回答と同様に、Powershellリモーティングでは次のようになります。
Enter-PSSession -ComputerName <your server> -Credential <username, or (Get-Credential)>
次に、インタラクティブセッションで、次のようにします。
appcmd recycle apppool my-app-pool
アプリプールを再起動します。
PowerShellでAppPoolをリサイクルする
この例では、MSExchangeSyncAppPool
$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()