0

我正在尝试获取 AD 组中每个用户的真实姓名,我已经创建它以获取输出以显示组中每个成员的用户 ID,然后尝试对net user $_ /domain. txt 文件,它给了我错误,就像那里什么都没有。在“你为什么不使用 Get-AD*”的猛烈攻击之前,我知道它就在那里,但我们不能在此处安装该模块。我需要其他人无需安装即可使用的东西。

我尝试了几种方法来解决这个问题,下面的代码是脚本中似乎无法正常工作的部分。我有另一种方法,我尝试将其注释掉,但将其留在那里作为另一个可能的起点。

function Return-DropDown {
    $Choice = $DropDown.SelectedItem.ToString()
    if ($Choice)
        {
        net group $Choice /domain > C:\Temp\RawOut.txt

        $UserID = Get-Content 'C:\Temp\RawOut.txt'
        $UserID[($UserID.IndexOf('-------------------------------------------------------------------------------') + 1) .. ($UserID.IndexOf('The command completed successfully.') -1)] > C:\Temp\RawIDs.txt

        Start C:\Temp\RawIDs.txt

        Remove-Item C:\Temp\RawOut.txt

        Get-Content -path C:\Temp\RawIDs.txt | ForEach-Object {net user $_ /domain | findstr "Full Name"} >> C:\Temp\$Choice+RealNames.txt
        #$RealNames = Get-Content -path C:\Temp\RawIDs.txt
        #ForEach ($_ in $RealNames) 
        #{
           # net user $_ /domain >> C:\Temp\$Choice+1.txt

           # }

        }

}

我得到的是:

net : The syntax of this command is:
At C:\Users\MyID\OneDrive - MyCompany\AD Group DropDown.ps1:34 char:64
+ ... path C:\Temp\RawIDs.txt | ForEach-Object {net user $_ /domain} >> C:\ ...
+                                               ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (The syntax of this command is::String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

NET USER
[username [password | *] [options]] [/DOMAIN]
         username {password | *} /ADD [options] [/DOMAIN]
         username [/DELETE] [/DOMAIN]
         username [/TIMES:{times | ALL}]
         username [/ACTIVE: {YES | NO}]

让我知道有关使此功能正常工作的任何建议。

4

1 回答 1

0

感谢@LotPings 帮助我找到解决方案。

我发现(通过查看 LotPings 评论的帖子)我正在以导致错误的格式获取输出。我的 txt 文件被格式化:

User1               User2               User3
User4               User5               User6
...

它试图将整行User1 User2 User3作为变量。这显然是行不通的。使用-replaceand-split为我的变量获取正确的格式,它现在可以工作了。

function Return-DropDown {
    $Choice = $DropDown.SelectedItem.ToString()
    if ($Choice)
        {
        net group $Choice /domain > C:\Temp\RawOut.txt

        $UserID = Get-Content 'C:\Temp\RawOut.txt'
        $UserID[($UserID.IndexOf('-------------------------------------------------------------------------------') + 1) .. ($UserID.IndexOf('The command completed successfully.') -1)] > C:\Temp\RawIDs.txt

        #Start C:\Temp\RawIDs.txt

        Remove-Item C:\Temp\RawOut.txt

        $results = Get-Content -path C:\Temp\RawIDs.txt

            foreach($result in $results) { 
                ($result -replace '\s+',',') -split ',' | ? { $_ } >> 'C:\temp\users.txt'
                }

        Get-Content -path C:\Temp\users.txt | ForEach-Object {net user $_ /domain | findstr "Full Name"} >> C:\Temp\$Choice.txt

        Remove-Item C:\Temp\users.txt
        Remove-Item C:\Temp\RawIDs.txt
        Start C:\Temp\$Choice.txt
        }

}
于 2019-09-05T20:36:40.443 回答