我在脚本中运行以下命令:
$currentSite = Get-Item IIS:\Sites\$WebSiteName
$currentSite.id = $WebSiteID
$currentSite | Set-Item
我想在其中设置网站的 id。 该脚本适用于某些环境,但不适用于其他环境(寻找不同之处,希望尽快发布)。
如果不起作用,则会返回以下错误:
Set-Item : Object reference not set to an instance of an object.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-Item], NullReferenceException
+ FullyQualifiedErrorId : path,Microsoft.PowerShell.Commands.SetItemCommand
因此,为了寻找解决方法,我尝试了以下代码:
$currentSite = Get-Item IIS:\Sites\$WebSiteName
$currentSite | Set-Item
但是我遇到了同样的错误。
所以我想知道 Set-Item 是否需要一些参数,但 Get-Item 在与站点一起使用时不会返回(我指定了站点,因为我使用相同的结构设置应用程序池,并且我不有任何问题)
即使这不能回答问题,我也找到了解决该问题的方法:
代替使用
$currentSite = Get-Item IIS:\Sites\$WebSiteName
$currentSite.id = $WebSiteID
$currentSite | Set-Item
可以使用以下命令设置网站的 id:
Set-ItemProperty -Path IIS:\Sites\$WebSiteName -Name id -Value $WebSiteID
这篇文章可能很旧,但是,将来的人可能会发现此信息有用。
我遇到了类似的问题,即相同的脚本在一个环境中工作,但在另一个类似的环境中不起作用。我的具体问题与修改 IIS 应用程序的日志路径有关。
Import-Module WebAdministration
$SiteName = "Default Web Site"
$LogPath = "M:\MGS_IISLogs\$SiteName"
$Site = Get-ItemProperty "IIS:\Sites\$SiteName"
$Site.logFile.Directory = $LogPath
$Site | Set-Item
这让我抓狂。然后我想起我将自定义字段(授权标头)添加到应用程序的日志记录配置中。删除所有自定义字段并运行修复了我的 Set-Item 错误。