我遇到了一個奇怪的問題,我不知道如何解釋。我希望有人能爲我揭開一些光。PowerShell管道參數問題
我想創建一個函數,它接受一個數組的參數,假設$輸出scriptnames和用戶有一個選項,從以前的結果,他們應該更喜歡管吧。我剝去了不相關的東西,以更好地說明我的困惑。
在模塊的過程中,我從數組中讀取每個項目,然後打印項目。
我的功能:
function Get-Test
{
[CmdletBinding()]
param
(
[parameter(mandatory=$true,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$true)]
[string[]]$scriptNames
)
BEGIN
{
}
PROCESS
{
foreach ($scriptName in $scriptNames)
{
Write-Verbose "Executing: $scriptname"
}
}
END{}
這裏是什麼讓我感到困惑:
方案1:
我用這個命令來獲取我的目錄中的文件列表:
get-childitem | Select-Object {$_.BaseName}
文件的列表是正確返回沒有擴展名:
然而,當我用管道輸送的結果,我的功能,我得到這個打印出來:
通知不必要的$ _.BaseName =文字被添加。
方案2:
但是,如果我發出此命令:
get-childitem | Select-Object $_.BaseName
結果並沒有真正篩選出的基本部分僅
但當管道到我的功能:
get-childitem | Select-Object $_.BaseName|
Get-Test -Verbose
的$ _basename文字是不包括:
然而,基名包括擴展,這真的讓我感到困惑。
有人能看到的東西,在你燃燒嗎?以及爲什麼會發生以下事情:
1)爲什麼$ _。BaseName文字標記在腳本1的打印輸出中,我沒有要求?
2)似乎爲什麼不選擇在方案2的工作,但打印出來沒有$ _。baseName的完全相同的腳本?
3)我需要在腳本中更正哪些內容才能打印出文件名,而不帶擴展名,也沒有文字$ _。BaseName?
'選擇 - 對象{$ _基礎名稱。}' - >'的foreach對象{$ _基礎名稱}' – PetSerAl