在C#结果中调用Powershell脚本返回0

时间:2014-05-15 10:19:01

标签: c# powershell invoke

我正在创建一个每分钟调用一次Powershell脚本的Windows服务。 Powershell脚本返回本地系统信息。

    function MachineInformation
    {
      [hashtable]$machine = @{}

      $computerSystem = get-wmiobject Win32_ComputerSystem

      $machine.machine = $computerSystem.Name
      $machine.key = $computerSystem.Manufacturer
      [String]$machine.value = Get-WmiObject win32_processor | Measure-Object -property   LoadPercentage -Average | Select Average
      [DateTime]$machine.timestamp = Get-Date



      Return $machine
    }

MachineInformation

当我在Powershell ISE中运行时,它可以工作。

我的C#Windows服务然后尝试调用脚本

                PowerShell ps = PowerShell.Create();

                ps.AddScript("C:\\Scripts\\SystemInfo.ps1");

                Collection<PSObject> results =  ps.Invoke();

                foreach (PSObject result in results)
                {
                    //Do something
                }

调试时,结果返回0.这几天前工作正常,现在已经决定停止。它让我疯狂了好几个小时。我做错了什么?

2 个答案:

答案 0 :(得分:2)

将构建类型从32位更改为64位,这可以解决您的问题。

答案 1 :(得分:1)

实际上我做了一个项目,并以“任何CPU”模式构建,它工作正常。我的问题是关于“位置”。我想通过尝试从另一个文件夹执行脚本,问题是在C#中我看不到错误消息。

为了解决我的问题,我在调用我的脚本之前插入了“Set-Location”cmdlet,例如:“Set-Location'c:\ myscriptlocation'; c:\ myscriptlocation \ myscript.ps1”。