我正在编写一个由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-Verbose
替换为Write-Host
,将Add-Content
替换为Out-File
,但我遇到的问题是,当我使用完整的网络时,不会创建任何内容/文件路径或分享例如\\SERVERNAME\SHARENAME.$
标识的路径具有所有正确的权限,并使用系统帐户在本地运行。
我想查看在写入文件时是否发生了问题,因此写入C:\Temp\
有没有人有任何想法来解决这个问题。
答案 0 :(得分:0)
我可能因为我的答案在技术上没有直接回答你的问题而被投票,但是,它试图指出你可能是一个更合乎逻辑的方向。如果我得罪任何人,我都会道歉,但现在是:
为什么不使用组策略禁用用户?如果您真的想知道用户在哪里被禁用,那么您可以使用硬件清单,但GP确实是实施此类设置的最佳方式。
答案 1 :(得分: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
}
}
任务序列中的命令是(它是x64机器):
PowerShell.exe -ExecutionPolicy Bypass -File"。\ DeactiveTest.ps1"