我正在尝试编写一个脚本,以从网络上每台计算机的启动文件夹中删除批处理文件。在某些计算机上,该文件位于所有用户启动文件夹中,因此该部分很容易。但是,我无法弄清楚如何搜索每台计算机上的所有用户帐户启动文件夹,以确保我删除该文件的每个实例。我尝试了以下方法:
invoke-command -ComputerName $computers -ScriptBlock {remove-item -Path 'c:\Users\%username%\appdata\roaming\microsoft\windows\Start Menu\programs\startup\logon.bat' }
我认为Powershell会将%usertname%视为一个变量并只查看所有用户名,但我错了。有没有办法让这项工作成功?
答案 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:variablename
。 Get-ChildItem env:
将以与“系统属性”对话框中相同的方式显示所有变量。
如果您没有搜索文件夹的权限,则需要使用-ErrorAction SilentlyContinue
,因为它会失败。您可以使用Test-Path
等内容使其更具弹性,但这应该足够简单。
将-Force
和-Confirm:$false
与Remove-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}}}}