Powershell Set-Item 返回未设置到实例对象的对象引用

问题描述 投票:0回答:2

我在脚本中运行以下命令:

$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 在与站点一起使用时不会返回(我指定了站点,因为我使用相同的结构设置应用程序池,并且我不有任何问题)

powershell powershell-4.0 powershell-5.0
2个回答
2
投票

即使这不能回答问题,我也找到了解决该问题的方法:

代替使用

$currentSite = Get-Item IIS:\Sites\$WebSiteName
$currentSite.id = $WebSiteID
$currentSite | Set-Item

可以使用以下命令设置网站的 id:

Set-ItemProperty -Path IIS:\Sites\$WebSiteName -Name id -Value $WebSiteID

0
投票

这篇文章可能很旧,但是,将来的人可能会发现此信息有用。

我遇到了类似的问题,即相同的脚本在一个环境中工作,但在另一个类似的环境中不起作用。我的具体问题与修改 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 错误。

© www.soinside.com 2019 - 2024. All rights reserved.