0

所以,我实际上不相信我传递给参数的字符串值是问题,我认为这是我的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未指定参数时,它将列出所有目录。

4

1 回答 1

0

$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
于 2021-04-01T02:12:54.830 回答