我有一个下面的powerShell脚本,可以为用户创建homedrive
Import-Module ActiveDirectory 2>&1 | Write-Host;
if($?)
{
$homeDir = "\\CORP.com\HOME\Jdoe";
$user = "jdoe";
$domain = "Corp";
New-Item "$homeDir" -type directory;
$acl = Get-Acl "$homeDir";
$permission = "$domain\$user","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow";
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission;
$acl.SetAccessRule($accessRule);
$acl | Set-Acl "$homeDir";
}
$ homeDir和$ User中的值将在运行时基础上传递。
如何执行上述脚本以及$ homeDir和$ User属性中的传递运行时值。
我试图执行
. 'C:\hd.ps1' $homeDir = "\\CORP.com\HOME\test" $user = "test" ;
没有成功。
任何人都可以指导,我在做什么不正确。
答案 0 :(得分:1)
放入
param(
$homeDir,
$user
)
在脚本顶部,使用
进行调用Powershell -File "C:\hd.ps1" -homeDir "\\CORP.com\HOME\test" -user "test"
答案 1 :(得分:0)
您为什么要这样做?
Import-Module ActiveDirectory 2>&1 | Write-Host;
如果您在DC上执行此操作,或者您的工作站上具有RSAT工具,如果您使用的是PowerShell v3 +或更高版本,则在使用AD cmdlet时会自动加载。
也不要为以后计划使用的任何内容使用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开始,您可以使用“使用” scopemodifier,用于在远程命令中标识本地变量。
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
}
如果您希望将其作为参数化函数,则此..
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 ''