我尝试创建一个脚本,根据他们的AD HomeDirectory为学生创建快捷方式,并将链接命名为AD显示名称。 Homedirectory是一个UNC路径。
然而,当我到达$ shortcut.targetpath区域时,它会抱怨无效参数。我认为它不喜欢$ homedir变量中的数据。我的代码是noobish。但我还在学习。任何帮助都会很棒。
###Read a Sisweb Extract
$data=Get-Content C:\studentfile.txt
###For each row in the file execute all of this
foreach ($line in $data)
{
###Parse the row and retrieve SSID
$columns = $line -split '\t'
$studentid = $columns[3]
###If a SSID is found execute the following code.
if($studentid -match "[0-9]")
{
###Retrieve DisplayName of the SSID.
$displayname=Get-aduser $studentid -property displayname |ft displayname -hidetableheaders |out-string
###Retrieve Home Directory of the SSID
$homedir=Get-aduser $studentid -property homedirectory |ft homedirectory -hidetableheaders |out-string
###Parse the homedirectory data and retrieve the servername.
$pathdata="$homedir" -split '\\'
$server=$pathdata[2]
###Create Shortcut
$WshShell=New-Object -comObject WScript.Shell
$Shortcut=$WshShell.CreateShortcut("C:\temp\$displayname.lnk")
$Shortcut.TargetPath="$homedir"
$Shortcut.Save()
}
}
答案 0 :(得分:0)
我将建立一个答案,因为我看到了一些应该解决的问题。最后,我认为您的问题在于$homedir
的分配。
if($studentid -match "[0-9]")
此代码将检查$studentid
是否包含单个数字。这是故意的吗?目前,如果ID为sdfhgkjhg3kjg
,您将获得一个匹配,因为它包含一位数。例如,一个简单的添加就是将其更改为if($studentid -match "^[0-9]{6}$")
。意味着它将匹配包含正好6位数的单行。
$displayname=Get-aduser $studentid -property displayname |ft displayname -hidetableheaders |out-string
我看到这两次。我会更新这个,因为格式表并没有真正起作用,你可以使用Select-Object
来实现你的目标。
Get-aduser $studentid -property displayname | select -first 1 -ExpandProperty displayname
Get-aduser $studentid -property homedirectory | select -first 1 -ExpandProperty homedirectory
或强>
您可以将两个变量分配合并,而不是两次调用get-aduser
。
$singleStudent = Get-aduser $studentid -property homedirectory,displayname
$displayname = $singleStudent.DisplayName
$homedir = $singleStudent.HomeDirectory