【发布时间】:2016-02-15 21:42:04
【问题描述】:
在对象中进行管道传输时,我遇到了 New-WebBinding 的问题。我有一个对象,它定义了 5 个属性:名称、协议、端口、IPAddress 和 HostHeader(New-WebBinding cmdlet 支持所有 5 个属性作为 Accept Pipeline 输入:ValueByPropertyName)。但是,当您通过管道输入此对象时,它仍会请求提交 Name:。如果您想复制问题,这是一个快速测试功能。如果您在提示符处按回车,它会成功处理对象并添加绑定。但是提示本身会将其作为非交互式脚本破坏。
我已经在 PS v3 和 PS v4 上测试过了。
我很确定我所做的一切都是正确的,但我想确保没有任何我可能忽略的东西。现在我只是在没有这个问题的 foreach 循环中迭代我的对象集合,但想看看这是否是我应该报告的错误。
function Test-WebBinding{
[CmdletBinding()]
Param()
$testBindingCol = @()
$testBinding1 = New-Object System.Object
$testBinding1 | Add-Member -MemberType NoteProperty -Name Name -Value 'Default Web Site'
$testBinding1 | Add-Member -MemberType NoteProperty -Name Protocol -Value 'https'
$testBinding1 | Add-Member -MemberType NoteProperty -Name Port -Value '4000'
$testBinding1 | Add-Member -MemberType NoteProperty -Name IPAddress -Value '*'
$testBinding1 | Add-Member -MemberType NoteProperty -Name HostHeader -Value 'Test4000'
$testBindingCol += $testBinding1
$testBinding2 = New-Object System.Object
$testBinding2 | Add-Member -MemberType NoteProperty -Name Name -Value 'Default Web Site'
$testBinding2 | Add-Member -MemberType NoteProperty -Name Protocol -Value 'http'
$testBinding2 | Add-Member -MemberType NoteProperty -Name Port -Value '4001'
$testBinding2 | Add-Member -MemberType NoteProperty -Name IPAddress -Value '*'
$testBinding2 | Add-Member -MemberType NoteProperty -Name HostHeader -Value 'Test4001'
$testBindingCol += $testBinding2
$testBindingCol | New-WebBinding
}
【问题讨论】:
-
期待看到这个问题的答案。我还尝试了
PSObject和PSCustomObject的变体,但没有成功。好问题。 -
目前 Microsoft Connect 似乎没有为任何版本的 Powershell 接收任何错误报告。所以我会留下一个最有可能的错误,唯一的解决方法是在 foreach 中迭代你的对象。我还没有第5版,不知道最新版是否解决了。
-
这在 v5 中的行为相同。我确实反汇编了
New-WebBindingcmdlet 所在的Microsoft.IIs.PowerShell.Provider程序集,并且我们感兴趣的属性正确地归因于[Parameter(ValueFromPipelineByPropertyName = true)] -
这绝对是错误。一种解决方法是将当前位置更改为某个站点 (
cd IIS:\Sites\SomeSite),这并不重要。
标签: powershell powershell-3.0 powershell-4.0 powershell-5.0