0

我正在编写一个由 SCCM 通过包部署的 powershell 脚本。这样做的目的是删除具有特定名称的帐户,然后写入文件,说明该帐户是否存在。代码如下:

$Computer = hostname
foreach ($C in $Computer) {
    if (Test-Connection $C -Quiet) {
    Write-Verbose "$C > Online"
        $Users = Get-WMIObject Win32_UserAccount -Filter "LocalAccount=True" -ComputerName $C

        if ($Users.Name -contains 'test') {
            Add-Content \\SERVERNAME\SHARENAME.$\$computer-found_$(get-date -Format yyyymmdd_hhmmtt).txt "User 'test' found, Disable 'test' found"
            net user test /active:no            }
        else {
            Add-Content \\SERVERNAME\SHARENAME.$\$computer-notfound_$(get-date -Format yyyymmdd_hhmmtt).txt "User 'test' not found"
        }
    }
    else {
    Write-Verbose "$C > Offline"
    }
}

我也尝试过Write-VerboseWrite-HostAdd-Content用替换,Out-File但我遇到的问题是,当我使用完整的网络路径或共享时,没有创建任何内容/文件,例如\\SERVERNAME\SHARENAME.$,标识的路径具有所有正确的权限,并且正在使用系统帐户在本地运行。

我想看看在本地写入文件时是否发生了问题,因此写入文件时不会发生这种情况C:\Temp\

有没有人有任何想法来解决这个问题。

4

2 回答 2

0

我不认为本地系统帐户可以访问网络资源。我不确定您是否曾经配置过它。以及您用来运行命令的命令是什么

在这里,我发布了一种在实验室测试后使用 Configuration Manager 部署执行此操作的工作方式。

基本上,我创建了一个包含源文件的包, 并使用单个“运行命令行”步骤创建了一个任务序列。 我使用任务序列的原因是因为我想使用一个帐户来访问网络上的 txt 文件,我可以在任务序列中对其进行配置。我认为本地系统帐户没有这样的权限。 在此处输入图像描述
在此处输入图像描述

我使用的脚本(DeactivateTest.ps1)如下所示,就像您提供的一样,并对逻辑进行了一些更改:

$Computer = hostname
foreach ($C in $Computer) {
    if (Test-Connection $C -Quiet) {
         Write-host "$C > Online"
         $Users = Get-WMIObject Win32_UserAccount -Filter "LocalAccount=True" -ComputerName $C
         $result=0
         Foreach($user in $Users){
             if ($User.Name -like '*test*') {
                 $username = $user.Name
                 "`n$(get-date -Format yyyymmdd_hhmmtt) User $username found ON $C, Disable 'test'" | Add-Content \\cas\resource\Result.txt
                 net user $username /active:no 
                 $result+=1
            }}

       if($result =0){
             "`n$(get-date -Format yyyymmdd_hhmmtt) User 'test' not found ON $C" | Add-Content  \\cas\resource\Result.txt}
             }

    else {
    "`n$C is Offline" | Add-Content \\cas\resource\Result.txt
    }
}
  • 该脚本查询本地帐户并禁用名称中包含“Test”字样的帐户。如果你不喜欢这个逻辑,你可以改变:)。
  • \\cas\resource\Result.txt 是网络共享上的 txt 文件。客户端会将结果写入此 txt 文件。
  • 任务序列中的命令是(它是 x64 机器):

    PowerShell.exe -ExecutionPolicy 绕过-文件“.\DeactiveTest.ps1”

输出如下:
在此处输入图像描述

于 2016-11-11T10:34:11.673 回答
0

我可能会因此而被否决,因为我的回答在技术上并没有直接回答您的问题,但是,它旨在尝试为您指出可能更合乎逻辑的方向。如果我冒犯了任何人,所有道歉,但这里是:

为什么不使用组策略禁用用户?如果您真的想知道用户在哪里/没有被禁用,那么您可以为此使用硬件清单,但 GP 确实是强制执行此类设置的最佳方式。

于 2016-11-10T08:22:58.910 回答