2

HPCコマンドレットをプログラムで実行して、リモートコンピューター上のHPCインストールクレデンシャルを変更しようとしています。コマンドレットをローカルで実行する場合、それは非常に簡単です。

Runspace rs = GetPowerShellRunspace();
rs.Open();

Pipeline pipeline = rs.CreatePipeline();
PSCredential credential = new PSCredential(domainAccount, newPassword);
Command cmd = new Command("Set-HpcClusterProperty");
cmd.Parameters.Add("InstallCredential", credential);

pipeline.Commands.Add(cmd);

Collection<PSObject> ret = pipeline.Invoke();

ただし、リモートPowerShellで同じことを実行したい場合は、Invoke-Commandを実行し、コマンド内のScriptBlockに資格情報を渡す必要があります。どうやってやるの?文字列ではなく、ScriptBlock内のInstallCredentialパラメーターにバインドされたオブジェクトとしてクレデンシャルを渡す必要があることを除いて、次のようになります。

Pipeline pipeline = rs.CreatePipeline();
PSCredential credential = new PSCredential(domainAccount, newPassword);

pipeline.Commands.AddScript(string.Format(
    CultureInfo.InvariantCulture,
    "Invoke-Command -ComputerName {0} -ScriptBlock {{ Set-HpcClusterProperty -InstallCredential {1} }}",
    nodeName,
    credential));

Collection<PSObject> ret = pipeline.Invoke();
4

2 に答える 2

9
powershell.AddCommand("Set-Variable");
powershell.AddParameter("Name", "cred");
powershell.AddParameter("Value", Credential);

powershell.AddScript(@"$s = New-PSSession -ComputerName '" + serverName + "' -Credential $cred");
powershell.AddScript(@"$a = Invoke-Command -Session $s -ScriptBlock {" + cmdlet + "}");
powershell.AddScript(@"Remove-PSSession -Session $s");
powershell.AddScript(@"echo $a");

ここで、Credentialはc#PSCredentialオブジェクトです。

私はこれを使用します、多分それはあなたを助けることができます。

于 2012-12-14T09:55:38.027 に答える
2

(AddScriptの代わりに)引き続きAddCommandを使用しますInvoke-Command。Invoke-Commandのパラメーターを追加し、パラメーターを取得したらScriptblock、scriptblockがparam()ブロックを定義していることを確認します。例:

{param($cred) Set-HpcClusterProperty -InstallCredential $cred}

次に、ArgumentListパラメーターをInvoke-Commandコマンドに追加し、作成したクレデンシャルに値を設定します。

于 2010-10-18T18:13:38.597 に答える