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