OKここに私の問題があります:
サーバー上でスクリプトをリモートで実行しようとしています。
私は両方のボックスの管理者であり、ファイアウォールの例外が設定されており、リモート管理者が有効になっています。
invoke-command -ComputerName $ComputerName -ScriptBlock `
{
cd C:\Windows\System32\inetsrv\;
./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files>
}
代わりに次のエラーが発生し続けます
ERROR ( hresult:80070005, message:Failed to commit configuration changes. Access is denied.
実行しようとしているサーバーはサーバー2k8R2ボックスであり、問題はUACの問題だと思います。 UACボックスで[はい]をクリックせずに、これを管理者として実行する方法はありますか?
このコードは、最終的には完全に自動化する必要のあるスクリプトになります。
どんな助けでも大歓迎です。
OK。いくつかの調査とテストの後、私は問題を理解しました。 UACとファイアウォールを無効にした後、スクリプトがまだ機能しないので、もう少し掘り下げてみると、主な問題は、invoke-commandがコマンドを実行する方法であることがわかりました。スクリプトを実行している人の資格情報を使用してサーバーへの認証を行い、別のアカウントを使用してアクセス許可を実行しようとするか、ユーザーの特権を下げて特定のコマンドを実行できないようにします。
Invokeコマンドに-Credentialsスイッチを追加しましたが、すべてが正常に機能しています。以下の修正されたコードサンプル:
$user = New-Object Management.Automation.PSCredential("$UserName", $securePassword)
invoke-command -ComputerName $ComputerName -Credential $user -ScriptBlock `
{
cd C:\Windows\System32\inetsrv\;
./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files>
}