Мы используем 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
нет?Права доступа?Недостающие модули?
Чтобы установить свойства WebSite, нам нужно работать с ним через Get-WebSite
.К сожалению, это кажется концептуальной проблемой ...
Спасибо за вашу помощь ...