IMO最簡單的方法是用有效憑證連接到目標計算機,然後您可以在沒有任何憑證提示的情況下執行任何代碼。爲此,您需要創建一個PSCredential
對象,它是一個用戶名和一個SecureString密碼。
爲純文本轉換爲SecureString的,你可以使用此功能:
private SecureString GetSecurePassword(string password)
{
var securePassword = new SecureString();
foreach (var c in password)
{
securePassword.AppendChar(c);
}
return securePassword;
}
那麼你的下一步是創建目標計算機WSManConnectionInfo
對象,並添加憑據,你可以再次使用此功能:
WSManConnectionInfo GetConnectionInfo(string computerName)
{
PSCredential creds = new PSCredential("UserName",
GetSecurePassword("Password"));
Uri remoteComputerUri = new Uri(string.Format("http://{0}:5985/wsman", computerName));
WSManConnectionInfo connection = new WSManConnectionInfo(remoteComputerUri,
"http://schemas.microsoft.com/powershell/Microsoft.PowerShell",
creds);
return connection;
}
最後,連接到目標計算機,並創建一個運行空間:
WSManConnectionInfo connectionInfo = GetConnectionInfo("computerName");
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
回到你的代碼:
Pipeline pipeline = runspace.CreatePipeline();
[...]
什麼樣的交互作用?你的意思是證書提示?當*不填充commandlet的'-Credentials'屬性時會發生這種情況。 –