【问题标题】:PowerShell Set-ItemProperty vs. dot to set a propertyPowerShell Set-ItemProperty vs. 点来设置属性
【发布时间】:2015-03-12 17:45:56
【问题描述】:

我正在尝试使用 PowerShell(版本 2)设置例如 ApplicationPool 的属性。
(如果重要的话,我有一台 Windows 7 64 位机器)

我看到 this example 使用 Set-ItemProperty 和 this example 使用点 . 来设置对象/元素的属性:

$pool | Set-ItemProperty -Name "managedRuntimeVersion" -Value "v4.0"

对比:

$pool.managedRuntimeVersion = "v4.0"

那么有什么区别呢?我认为第二个更具可读性,但我不知道其中的含义。

编辑:
我注意到(至少在这种情况下)存在差异,Set-ItemProperty 确实直接保存了属性的值,而另一种方法确实设置了值(在调试时)但之后不保存。 我还不知道为什么会这样。 (您需要调用保存或提交之类的方法吗?) 请参阅@moonstom 的答案,对于 Powershell 2.0,Set-ItemProperty 是唯一的方法,对于 Powershell 3+,请参阅 $pool | Set-Item (see sample)。

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    您正在处理该应用程序池的表示。如果您检查该对象的类型,您将获得一个配置元素。所以在设置好之后,你需要使用$pool | Set-Item 将你的设置推回,在 PS 3.0 及更高版本中可用。否则你唯一的选择是Set-ItemProperty

    【讨论】:

    • 显然我没有指向完整示例的链接。现在我found one,请参阅SET-ITEM AND GET-ITEM 部分。我使用的是 Powershell 2.0,所以必须使用 Set-ItemProperty
    【解决方案2】:

    没有区别。在第一个中,您通过管道将对象传递给 Set-ItemProperty 命令行开关,并通过命令行开关设置对象属性。

    第二个是您直接在对象上设置的。但它们在功能上是相同的。使用第二个,您还可以像这样检索属性的值:

    $value = $pool.managedRuntimeVersion
    

    【讨论】:

    • 感谢您的干净回答。但是,我注意到直接在对象上设置不会保存值? See sample code。您确定没有区别还是我在这里做错了什么?
    • 这也是发生在我身上的事情。通过点符号设置池没有任何作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多