为什么在传递将其传递给 for 循环显示的 exclude 参数时不显示完整的目录名称?
Why doesn't the full directory name display when passing an exclude parameter which passes it to a for loop to display?
所以,我实际上不相信我传递给参数的字符串值是问题所在,我认为它是我的 for
循环显示它的方式。
Function Get-Users{
[cmdletbinding()]
Param(
[Parameter(Mandatory=$false,
ValueFromPipeLine=$true,
ValueFromPipeLineByPropertyName=$true,
HelpMessage='Enter Computer Name')]
[Alias('CN','Computer','Name')]
[ValidateLength(1,15)]
[string]$ComputerName = $env:COMPUTERNAME,
[Parameter(Mandatory=$false,
ValueFromPipeLine=$true,
ValueFromPipeLineByPropertyName=$true)]
[String]$Exclude
)
$UNC = Get-ChildItem -Path \$ComputerName\c$\Users -Exclude $Exclude -Directory | Select-Object -ExpandProperty Name | Sort-Object -Descending
for($i=0; $i -lt $UNC.Count; $i++){
"$($i): $($UNC[$i])" }
""
$SS = Read-Host -Prompt "Enter # of user(s)"
$s = $SS -split " "
foreach($user in $UNC[$s]){
"$User" }
}
我觉得这应该像我在控制台中 运行 时那样工作,就像这样:Get-ChildItem -Path C:\users -Exclude "Abraham" -Directory
;它只是排除了我的目录列表。
即使在参数中未指定任何内容,它仍然可以正常运行:Get-ChildItem -Path C:\users -Exclude "" -Directory
关于列出所有目录,但是当我使用自制参数传递它时,它无法正确显示。我得到的是以下内容:
PS > Get-Users -Exclude Abraham
0: P
Enter # of user(s):
什么时候应该是:
PS > Get-Users -Exclude Abraham
0: Public
Enter # of user(s):
有人可以告诉我为什么它不显示完整的目录名称吗?
请注意,如果未指定 -Exclude
参数,它将列出所有目录。
将此 $UNC = Get-ChildItem -Path \$C......
更改为此 $UNC = @(Get-ChildItem -Path \$C......)
或此 [array]$UNC = Get-ChildItem -Path \$C.......
问题是你只从 gci
得到一个结果,因为变量是一个字符串而不是一个数组,因此当调用你的字符串的位置 0 时你得到字符串的第一个字母而不是数组的第一个元素:)
PS /~> $unc=(gci *.txt).Name
PS /~> for($i=0; $i -lt $unc.count; $i++)
{
"$($i): $($UNC[$i])"
}
0: t
PS /~> [array]$unc=$unc
PS /~> for($i=0; $i -lt $unc.count; $i++)
{
"$($i): $($UNC[$i])"
}
0: test.txt
所以,我实际上不相信我传递给参数的字符串值是问题所在,我认为它是我的 for
循环显示它的方式。
Function Get-Users{
[cmdletbinding()]
Param(
[Parameter(Mandatory=$false,
ValueFromPipeLine=$true,
ValueFromPipeLineByPropertyName=$true,
HelpMessage='Enter Computer Name')]
[Alias('CN','Computer','Name')]
[ValidateLength(1,15)]
[string]$ComputerName = $env:COMPUTERNAME,
[Parameter(Mandatory=$false,
ValueFromPipeLine=$true,
ValueFromPipeLineByPropertyName=$true)]
[String]$Exclude
)
$UNC = Get-ChildItem -Path \$ComputerName\c$\Users -Exclude $Exclude -Directory | Select-Object -ExpandProperty Name | Sort-Object -Descending
for($i=0; $i -lt $UNC.Count; $i++){
"$($i): $($UNC[$i])" }
""
$SS = Read-Host -Prompt "Enter # of user(s)"
$s = $SS -split " "
foreach($user in $UNC[$s]){
"$User" }
}
我觉得这应该像我在控制台中 运行 时那样工作,就像这样:Get-ChildItem -Path C:\users -Exclude "Abraham" -Directory
;它只是排除了我的目录列表。
即使在参数中未指定任何内容,它仍然可以正常运行:Get-ChildItem -Path C:\users -Exclude "" -Directory
关于列出所有目录,但是当我使用自制参数传递它时,它无法正确显示。我得到的是以下内容:
PS > Get-Users -Exclude Abraham
0: P
Enter # of user(s):
什么时候应该是:
PS > Get-Users -Exclude Abraham
0: Public
Enter # of user(s):
有人可以告诉我为什么它不显示完整的目录名称吗?
请注意,如果未指定 -Exclude
参数,它将列出所有目录。
将此 $UNC = Get-ChildItem -Path \$C......
更改为此 $UNC = @(Get-ChildItem -Path \$C......)
或此 [array]$UNC = Get-ChildItem -Path \$C.......
问题是你只从 gci
得到一个结果,因为变量是一个字符串而不是一个数组,因此当调用你的字符串的位置 0 时你得到字符串的第一个字母而不是数组的第一个元素:)
PS /~> $unc=(gci *.txt).Name
PS /~> for($i=0; $i -lt $unc.count; $i++)
{
"$($i): $($UNC[$i])"
}
0: t
PS /~> [array]$unc=$unc
PS /~> for($i=0; $i -lt $unc.count; $i++)
{
"$($i): $($UNC[$i])"
}
0: test.txt