Мне нужна помощь с этим кодом:
#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
для проверки строки с двумя подстановочными знаками, поэтому мне интересно, где я ошибаюсь.