PowerShellスクリプトで管理者としてコマンドを実行します。 UAC
-
20-09-2019 - |
質問
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.
実行しようとしているサーバーは、サーバー2K8 R2ボックスであり、私は問題がUACの問題で考えています。 UACボックスで[はい]をクリックしなくても、これは管理者として実行するために取得することがとにかくありますか?
このコードの一部は、最終的には完全に自動化されなければならないスクリプトになります。
任意の助けいただければ幸いです。
解決
OK。いくつかの研究とテストの後、私はこの問題を考え出しました。 UAC、ファイアウォール、スクリプトがまだ動作していないを無効にした後、私は少し深く掘って主な問題は、Invoke-Commandコマンドは、コマンドを実行方法であることを発見しました。それがサーバーに認証するためのスクリプトを実行している人の資格情報を使用して、その後、特定のコマンドが実行できないようにアクセス権または低下するユーザの権限を実行するために別のアカウントを使用しようとします。
私は-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>
}
他のヒント
これにはそれを示すように思われますあなたは(確かにこれは特にWMIのためであるが)は、リモートマシン上のローカル管理者であることを確認する必要があります。 によれば、これはあなたが適用UACを停止するには、レジストリキーを変更することができますを管理者のためのリモートログオン(LocalAccountTokenFilterPolicyのために検索してください)。それはあなたが管理者アカウントを使用してリモートのPowerShell / WMIを使用している場合だけでトークンをフィルタリングしないUACを無効にするべきではありません。
HKLM \ SOFTWARE \マイクロソフト\ Windowsの\ CurrentVersionの\ポリシー\ 0までのシステムと再起動で見つかったオプション "EnableLUA"(DWORD値)を設定します。
このは問題なくUACを無効にします、私はVistaのUACは私がより良いにそれを持ってあまり人を信じないように恐ろしいですので、あなた次第ですとかどうかの許可なしに、すべてのユーザーのためにそれを行うだろう(少なくともVistaの)彼らがあります。 Thsiのトリックは、あまりにもwin7の中で動作します。
私のレジストリのトリックを楽しんで:)
P.S。:それはSO(勤勉な答えが削除された)限り上記の解答を持つ私のポスト/スレッドに関してはUACを無効にする方法を示しコメントを検閲されます。
結局のところUACボックスで[はい]をクリックしなくても、これは管理者として実行するために取得することがとにかくありますか?
これが可能だった場合、それは完全にUACのポイントを台無しにしてしまう。
このように、あなたの唯一の真の解決策は、ボックスにUACを無効にすることであると思われる。