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

时间:2014-12-19 19:40:52

标签: powershell scripting

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

invoke-command -ComputerName $computers -ScriptBlock {remove-item -Path 'c:\Users\%username%\appdata\roaming\microsoft\windows\Start Menu\programs\startup\logon.bat' }

我认为Powershell会将%usertname%视为一个变量并只查看所有用户名,但我错了。有没有办法让这项工作成功?

2 个答案:

答案 0 :(得分:2)

您应该能够将%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:variablenameGet-ChildItem env:将以与“系统属性”对话框中相同的方式显示所有变量。

如果您没有搜索文件夹的权限,则需要使用-ErrorAction SilentlyContinue,因为它会失败。您可以使用Test-Path等内容使其更具弹性,但这应该足够简单。

-Force-Confirm:$falseRemove-Item一起使用也不会造成伤害。

答案 1 :(得分:0)

怎么样......

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}}}}