Почему ты это делаешь?
Import-Module ActiveDirectory 2>&1 | Write-Host;
Если вы выполняете это на контроллере домена или если на вашей рабочей станции есть инструменты RSAT, если вы используете PowerShell v3 + или выше, он автоматически загружается при использовании командлета AD.
Также никогда не используйте Write-Host для чего-либо, что вам потребуется позже. Это очищает / очищает буфер. Write-Host подходит только для окраски текста или других потребностей форматирования в s
Сделайте коллекцию из файла, например, и просто прочитайте ее. Я просто использую список здесь:
$UserFile = @'
Property,Value
homeDir,\\CORP.com\HOME\Jdoe
user,jdoe
Targetdomain,Corp
'@ | ConvertFrom-Csv
# Results
Property Value
-------- -----
homeDir \\CORP.com\HOME\Jdoe
user jdoe
Targetdomain Corp
Если вы делаете это с удаленного компьютера, то вы не сможете использовать локальные переменные в удаленном сеансе, пока не установите его область действия.
Get-Help about_remote_variables -Full
Об удаленных переменных
ПОЛНОЕ ОПИСАНИЕ
Вы можете использовать переменные в командах, которые вы запускаете удаленно
компьютеры. Просто присвойте значение переменной, а затем используйте
переменная на месте значения.
По умолчанию переменные в удаленных командах предполагаются
определяется в сеансе, в котором выполняется команда. Вы также можете использовать
переменные, которые определены в локальной сессии, но вы должны определить
их как локальные переменные в команде.
ИСПОЛЬЗОВАНИЕ МЕСТНЫХ ПЕРЕМЕННЫХ
Вы также можете использовать локальные переменные в удаленных командах, но вы
должен указывать, что переменная определена в локальном сеансе.
Начиная с Windows PowerShell 3.0, вы можете использовать
модификатор области для определения локальной переменной в удаленной команде.
Точки с запятой не нужны в PowerShell, если элементы не находятся на одной строке.
Вы не можете назвать этот код таким образом ...
'C:\hd.ps1' $homeDir = "\\CORP.com\HOME\test" $user = "test"
... так как вы не указали никаких параметров в вашем коде.
Итак, как-то так ...
Примечание: я не в состоянии проверить это ... пожалуйста, делайте это только в тестовой среде
Так что это не так ...
ForEach($UserLine in $UserFile)
{
New-Item $UserLine.homeDir -type directory
$acl = Get-Acl $UserLine.homeDir
$permission = ($Using:UserLine.Targetdomain + '\' + $Using:UserLine.user),'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
$acl | Set-Acl $Using:UserLine.homeDir
}
Если вы хотите, чтобы это была параметризованная функция, то this.,.
Function New-ADUserHomeDirSettings
{
[cmdletbinding()]
Param
(
[string]$homeDir,
[string]$user,
[string]$Targetdomain
)
$acl = Get-Acl $UserLine.homeDir
$permission = ($Using:UserLine.Targetdomain + '\' + $Using:UserLine.user),'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
$acl | Set-Acl $Using:UserLine.homeDir
}
New-ADUserHomeDirSettings -homeDir '' -user '' -Targetdomain ''