Я пытаюсь выполнить командлет 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 внутри Command. Как я могу это сделать? Это может выглядеть примерно так, за исключением того, что мне нужно передать учетные данные как объект, связанный с параметром InstallCredential внутри ScriptBlock вместо строки:
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();