web-dev-qa-db-ja.com

PowerShellログインスクリプトを使用して現在のOUを取得するにはどうすればよいですか?

それぞれが複数の個別のユーザーアカウントを持つさまざまなクライアント組織で使用されるターミナルサーバー2008をセットアップしています。各クライアント組織に\ server\clients \にマップされたドライブを持たせたい

彼らのOU名はクライアント名でもあるので、現在のOUを見つけて、それをマッピングコマンドに使用できるようにしたいと思います。 OUは階層的であるため、必要なOUの最下位の名前です。


OU:
専用クライアント\ AjaxCorp

ドライブをマッピングする必要があります
\\ server1\shares\AjaxCorp

OUを取得する方法に関する提案はありますか?私はそれが簡単であるに違いないと確信しています、私はそれを理解していません...

VBスクリプトを使用してこれを行う方法についての情報を見つけましたが、それはまったく新しい環境なので、代わりにPowerShellを使用するのがいいと思いました。

5
Frans

私は最終的に http://www.Microsoft.com/technet/scriptcenter/resources/pstips/dec07/pstip1207.mspx からOUを取得する方法を見つけ、結果を共有すると思いました。 OUを取得するためのコードは次のとおりです。

$strName = $env:username
$strFilter = "(&(objectCategory=User)(samAccountName=$strName))"

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter

$objPath = $objSearcher.FindOne()
$objUser = $objPath.GetDirectoryEntry()
$objUser.memberOf

しかし、ユーザーが複数のOUのメンバーである可能性があるため、OUの使用は困難であることに気づきました。そのため、UserオブジェクトでCompanyフィールドを使用することにしました。上記と同じコードから

$strCompany = $objUser.Company   

そして、ドライブマッピングを行います。

これは私の最初の質問に答えますが、興味を引くために、結局、ログオンスクリプトにPowerShellを使用しないことに決めたことに言及する必要があります。グループポリシーに.ps1ファイルを配置するだけでなく、cmdファイルからPowershell.exeを明示的に呼び出す必要があります。だから、私は数分でvbscriptで自分のスクリプトを書き直し、それから始めていなかったことを後悔しました:)

0
Frans

これにより、現在のコンピューターへのLDAPパスが取得されます。

$objDomain = New-Object System.DirectoryServices.DirectoryEntry  
$strFilter = "(&(objectCategory=computer)(name=" + $env:computername + "))"

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher  
$objSearcher.SearchRoot = $objDomain  
$objSearcher.Filter = $strFilter

$strPath = $objSearcher.FindOne().Path

$ strPathの結果から、必要な共有へのネットワークパスを構築できるはずです。

4
Massimo

ユーザーオブジェクトのMicrosoft.ActiveDirectory.Management.ADOrganizationalUnitタイプのオブジェクトを実際に返すには、次のようにします。

Get-ADOrganizationalUnit -Identity $(($adUser = Get-ADUser -Identity $env:USERNAME).DistinguishedName.SubString($adUser.DistinguishedName.IndexOf("OU=")))

コンピュータでも同じことができます。

Get-ADOrganizationalUnit -Identity $(($adComputer = Get-ADComputer -Identity $env:COMPUTERNAME).DistinguishedName.SubString($adComputer.DistinguishedName.IndexOf("OU=")))
1
tomohulk

これを使用してouを取得しました

$ hostname =ホスト名

$ hostnameobject = get-adcomputer $ hostname

$ ou = $ hostnameobject.distinguishedname

0
Sonny Davis

ユーザーのDNを見つけて、そこから解析します。

私は、Powershellのエキスパートでも、アマチュアでもありませんが、おそらくそこから始めます。

申し訳ありませんが、それ以上の支援はできません。うまくいけば、それは思考の糧になるでしょう。

0
LukeR

ただし、ユーザーが複数のOUのメンバーである可能性があるため、OUを使用するのは困難であることに気づきました

いいえ、できません。定義によれば、ユーザーアカウントはAD内の1つの場所にのみ存在できます。ただし、異なるユーザーが同じRDNを使用している場合があります。

0
DennisL