首页 > 解决方案 > System.Management.Automation.PowerShell 不从 IIS 返回 Get-Website 的结果

问题描述

我们System.Management.Automation.PowerShell用于执行 PowerShell 脚本。

在我们需要在 IIS 上设置网站的某些属性(ServerAutostart 等)之前,在许多情况下一切正常。

我们制作了一个 PS1 脚本,它按预期工作,但是,在通过 C# 执行后,它崩溃了。经过一番探索,我提取了有问题的部分:

PS1脚本:

# Set execution policy
Set-ExecutionPolicy Unrestricted -Scope Process -Force
Set-ExecutionPolicy Unrestricted -Scope LocalMachine -Force
Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force

# Import modules
Import-Module WebAdministration
Import-Module IISAdministration -MinimumVersion 1.1.0.0

# Getting IIS Sites
$iisSite = Get-IISSite

If ($iisSite)
{
    Write-Host "$($iisSite.Count) IISSites were found"
} 
else 
{
    Write-Error "IISSite was not found"
}

$webSite = Get-Website

# Getting Web Sites

If ($webSite)
{
    Write-Host "$($webSite.Count) WebSites were found"
} 
else 
{
    Write-Error "WebSites was not found"
} 

如果我通过 运行它Windows PowerShell ISE,它会完美运行:

23 IISSites were found
23 WebSites were found

但是,如果脚本是通过 C# 和 执行的System.Management.Automation.PowerShell,它会返回以下内容:

23 IISSites were found
WebSites was not found

有什么不同?为什么Get-IISSite有效Get-Website而不有效?权限?缺少模块?

要设置网站属性,我们需要通过Get-WebSite. 不幸的是,这似乎是一个概念问题......

感谢您的帮助...

标签: c#powershelliis

解决方案


问题是由于在 64 位系统的“构建”选项卡中首选32位模式引起的。

首选 32 位模式

取消选中后,一切正常。

请参阅Powershell Invoke 方法既不抛出异常也不返回结果


推荐阅读