基于AD HomeDirectory创建快捷方式

时间:2014-08-20 18:08:27

标签: powershell

我尝试创建一个脚本,根据他们的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()

        }
   }

1 个答案:

答案 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