2017-01-09 9 views
1

ユーザーsslストアに証明書をインストールします。したがって、ユーザー資格情報でStart-Processを実行し、-LoadUserProfileと設定します。そうでない場合、インポートプロセスは"ファイルが見つかりません"で失敗します。CustomScriptExtensionでStart-Process(アクセスが拒否されました)を実行できません

VMのプロビジョニング中にこれを実行したいので、私はCustomScriptExtensionを使用しています。このコマンドは、RDPを使用してマシンにログインしたときに正常に動作しますが、拡張機能にはありません。 "Start-Process:このコマンドはエラーのために実行できません:アクセスが拒否されました。"

実行ユーザー(NTAUTHORITY \ SYSTEM)に十分な権限があると思ってコマンドを実行しました。助言がありますか?

ランダムパスワードを持つ新しいユーザーアカウントが生成され、資格情報が$credentialsに格納されます。 $filePathは、カスタムのC#コマンドラインツールを使用して証明書をインポートします。 $certPassはパラメータとして提供されます。ここに私のコードは次のとおりです。

Start-Process -LoadUserProfile -NoNewWindow -Credential $credentials -FilePath $filePath -ArgumentList @("--importCertificate", $certPass) 

この質問はthis oneに関連するある程度です。

答えて

1

セキュリティ上の理由から、SYSTEMユーザーは(スタートプロセス、runasなどを介して)他のユーザーを偽装することはできません。偽装の詳細については、Impersonate a client after authenticationを参照してください。

Start-Processを使用するために、GPOを調整したり、レジストリを編集したり(ntrights.exeなどのコマンドラインツールを使用して)、私はusing PsExec (from the Sysinternals Suite)を使用することができます。 Start-Processと同様に、PsExecではユーザー名とパスワードを渡すことができますが、利用可能であれば、アカウントの昇格トークンでプロセスを起動する-hフラグもあります。

あなたのコマンドは、その後のようになります。

私のARMテンプレートCustomScriptExtension PowerShellスクリプトで
psexec -h -u $username -p $password c:\path\to\tool.exe --importCertificate $certPass 

、私はchocolateyを使用してPsExecはをインストールしたい:

Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) 
C:\ProgramData\chocolatey\bin\choco.exe install -y sysinternals 
関連する問題