我创建了一个C#函数来执行PowerShell脚本,从远程计算机下载并解压缩文件。它运行成功,但没有下载任何内容。
下面是我目前的代码:
public static string RemotePSExecution(string ipAddress, string username, string password, string psFilePath)
{
string result = string.Empty;
var securePassword = new SecureString();
foreach (Char c in password)
{
securePassword.AppendChar(c);
}
PSCredential creds = new PSCredential(username, securePassword);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
connectionInfo.ComputerName = ipAddress;
connectionInfo.Credential = creds;
String psProg = File.ReadAllText(psFilePath);
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
using (PowerShell ps = PowerShell.Create())
{
ps.Runspace = runspace;
ps.AddScript(psProg);
StringBuilder sb = new StringBuilder();
try
{
var results = ps.Invoke();
foreach (var x in results)
{
sb.AppendLine(x.ToString());
}
result = sb.ToString().Trim();
}
catch (Exception e)
{
throw new Exception("Error occurred in PowerShell script", e.InnerException);
}
}
runspace.Close();
return result;
}
我的PowerShell脚本:
$url = "https://<internal website>/xp.zip"
$zipFile = "Downloads\xp.zip"
$targetDir = "Downloads\UnZipFiles\"
Invoke-WebRequest -Uri $url -OutFile $zipFile
Expand-Archive $zipFile -DestinationPath $targetDir -Force
如果我直接在远程VM上运行PowerShell脚本,那么文件会成功下载并解压缩。但是如果我使用C#运行脚本,那么什么都不会下载。
另外,C#函数适用于下面的PowerShell脚本:
(Get-Service -DisplayName "*Service").Status
型
有人知道我的代码出了什么问题吗?
2条答案
按热度按时间46qrfjad1#
尝试为PS文件中的zipfile和targetdir指定一个绝对路径而不是相对路径。您的文件可能下载到某个临时或appdata文件夹中。
agyaoht72#
你说得对。在PS文件中指定了zipfile和targetdir的绝对路径后,文件就按预期下载并解压缩了。非常感谢,@Gaël James。非常感谢你的帮助。
下面是我更新的PS文件: