Get-ChildItem для PowerShell для имени пользователя - PullRequest
0 голосов
/ 22 февраля 2011

Мне нужна помощь с этим кодом:

#Set the starting directory to C:\Users
Set-Location "C:\Users\"

#Creates and empty array
$userdirs = New-Object System.Collections.ArrayList($null)

#List of all directories in Documents and Settings and this list is then manipulated to output the full directory path
$dirs = Get-ChildItem | Select-Object FullName | Where-Object {!($_.psiscontainer)} | foreach {$_.FullName}

#Adds the results of the Get-ChildItem manipulation to the array $userdirs
$userdirs.AddRange($dirs)

#Testing each member of array
#echo $userdirs
foreach ($dir in $userdirs){
    if ($dir -contains *[Environment]::UserName*){
        echo This path contains username
    }
    Else{
        echo This path does not
    }
}

Целью этого кода было перечислить все каталоги в папке C:\Users, а затем протестировать каталог, содержащий текущее имя пользователя для входа в систему. В будущем часть If Else будет выполнять тестовый путь, а затем копировать файл, если каталог существует для каждого экземпляра каталога с именем пользователя в нем. В настоящее время все, что я получаю, это:

Вы должны предоставить выражение значения в правой части оператора -contains.
По адресу C: \ testpath.ps1: 12 char: 31
+ if ($ dir -contains <<<< <em>[Environment] :: UserName ) {
+ CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId: ExpectedValueExpression

У меня сложилось впечатление, что я могу использовать инструмент -contains для проверки строки с двумя подстановочными знаками, поэтому мне интересно, где я ошибаюсь.

1 Ответ

2 голосов
/ 22 февраля 2011

Вот что вы можете захотеть:

Set-Location "C:\Users\"
$dirs = Get-ChildItem | ? { $_.psiscontainer } | % { $_.FullName }

foreach ($dir in $userdirs)
{
    if ($dir -match $env:USERNAME)
    {
        Write-Host "$dir - This path contains username"
    }
}

Два (из ряда) вопросов с вашим подходом

$dirs = Get-ChildItem | Select-Object FullName `
| Where-Object {!($_.psiscontainer)} | foreach {$_.FullName}

После того, как вы сделали объект выбора, вы не можете получить доступ к исходному объекту DirectoryInfo

И -contains для списка объектов, вы, вероятно, хотите -match

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...