Powershell从多个用户删除文件';启动文件夹

Powershell从多个用户删除文件';启动文件夹,powershell,scripting,Powershell,Scripting,我正试图编写一个脚本,从网络上每台计算机的启动文件夹中删除一个批处理文件。在某些计算机上,该文件位于“所有用户”启动文件夹中,因此该部分很简单。但是,我不知道如何搜索每台计算机上的所有用户帐户启动文件夹,以确保删除该文件的每个实例。我尝试了以下方法: invoke-command -ComputerName $computers -ScriptBlock {remove-item -Path 'c:\Users\%username%\appdata\roaming\microsoft\windo

我正试图编写一个脚本,从网络上每台计算机的启动文件夹中删除一个批处理文件。在某些计算机上,该文件位于“所有用户”启动文件夹中,因此该部分很简单。但是,我不知道如何搜索每台计算机上的所有用户帐户启动文件夹,以确保删除该文件的每个实例。我尝试了以下方法:

invoke-command -ComputerName $computers -ScriptBlock {remove-item -Path 'c:\Users\%username%\appdata\roaming\microsoft\windows\Start Menu\programs\startup\logon.bat' }
我假设Powershell会将%usertname%视为一个变量,然后只查看所有用户名,但我错了。有没有办法让这一切顺利进行

那么

Foreach ($Computer in $computers){invoke-command -ComputerName $computer -ScriptBlock {
$Directories = Get-ChildItem C:\Users | ? {$_.Attributes -eq "Directory"}
ForEach($Directory in $Directories){
$File=($Directory.FullName) + "\appdata\roaming\microsoft\windows\Start Menu\programs\startup\logon.bat"
If(Test-path $File){
remove-item $File}}}}

您应该能够将
%username%
替换为
*
,因为它接受通配符。这将有助于检查每个文件夹

invoke-command -ComputerName $computers -ScriptBlock {remove-item -Path 'c:\Users\*\appdata\roaming\microsoft\windows\Start Menu\programs\startup\logon.bat' -ErrorAction SilentlyContinue }
PowerShell中的环境变量使用约定
$env:variablename
Get ChildItem env:
将以与“系统属性”对话框中相同的方式显示所有变量

您需要使用
-ErrorAction SilentlyContinue
,因为如果您没有搜索文件夹的权限,它将失败。您可以使用
testpath
之类的方法使其更具弹性,但这应该足够简单


使用
-Force
-Confirm:$false
删除项目
也不会造成伤害

这里是2分。1.PowerShell中使用的环境变量<代码>$env:username。2.它们只有正在运行的用户的上下文。您必须搜索所有文件夹