powershell 执行脚本以在远程计算机上下载并解压缩文件,它成功运行,但未下载任何内容

j9per5c4  于 2022-12-18  发布在  Shell
关注(0)|答案(2)|浏览(148)

我创建了一个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


有人知道我的代码出了什么问题吗?

46qrfjad

46qrfjad1#

尝试为PS文件中的zipfile和targetdir指定一个绝对路径而不是相对路径。您的文件可能下载到某个临时或appdata文件夹中。

agyaoht7

agyaoht72#

你说得对。在PS文件中指定了zipfile和targetdir的绝对路径后,文件就按预期下载并解压缩了。非常感谢,@Gaël James。非常感谢你的帮助。
下面是我更新的PS文件:

$url = "https://<internal website>/xp.zip"
$zipFile = "C:\Users\<current user>\Downloads\xp.zip"
$targetDir = "C:\Users\<current user>\Downloads\UnZipFiles\"

Invoke-WebRequest -Uri $url -OutFile $zipFile 
Expand-Archive $zipFile -DestinationPath $targetDir -Force

相关问题