【发布时间】:2017-05-09 19:55:50
【问题描述】:
我遇到了一个奇怪的问题,我不知道如何解释。我希望有人能给我一些启示。
我想创建一个函数,它接受一个数组的参数,假设 $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) 为什么在场景 1 的打印输出中标记了 $_.BaseName 文字,而我没有要求这样做?
2) 为什么选择在方案 2 中似乎不起作用,但打印输出没有具有完全相同脚本的 $_.baseName?
3) 我需要在我的脚本中更正什么以仅打印不带扩展名且不带文字 $_.BaseName 的文件名?
【问题讨论】:
-
Select-Object {$_.BaseName}->ForEach-Object {$_.BaseName}
标签: powershell