Я пытаюсь выполнить команды powershell на удаленной машине, используя следующий код:
string shellUri = "http://schemas.microsoft.com/powershell/Microsoft.PowerShell";
PSCredential remoteCredential = new PSCredential("User", StringToSecureString("password"));
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
false, "ipaddress", 5985, "/wsman", shellUri, remoteCredential, 1 * 60 * 1000);
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
using (PowerShell ps = PowerShell.Create())
{
ps.Runspace = runspace;
ps.AddCommand("get-process");
Collection<PSObject> res = ps.Invoke();
}
Список методов StringToSecureString:
private SecureString StringToSecureString(string str)
{
SecureString secureStr = new SecureString();
foreach(char c in str)
{
secureStr.AppendChar(c);
}
return secureStr;
}
Я могу успешно выполнить некоторые команды, такие как get-process или get-service.
Но есть некоторые команды (например, $env:username), которые выдают следующую ошибку:
Этот термин не распознается как командлет, функция, исполняемая программа или файл сценария.
Но команда $env:username будет успешно выполнена, если я подключусь напрямую с помощью powershell:
Enter-PSSession -ComputerName ipaddress -Credential username
Есть некоторые другие команды, не связанные с переменными среды, которые я тоже не могу выполнить (команда приложения CLI не работает с использованием кода или powershell).
Я новичок в powershell и WinRM и понятия не имею, что не так. Кто-нибудь знает причину?
$env:username
не является командой. ИспользуйтеAddScript()
вместоAddCommand()
- person Mathias R. Jessen   schedule 05.07.2021.AddScript()
против.AddCommand()
в PowerShell SDK. - person mklement0   schedule 05.07.2021