【问题标题】:Powershell remove a file from multiple users' startup foldersPowershell 从多个用户的启动文件夹中删除一个文件
【发布时间】:2014-12-19 19:40:52
【问题描述】:

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

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

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

【问题讨论】:

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

标签: powershell scripting


【解决方案1】:

您应该能够将%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 一起使用也不会造成伤害。

【讨论】:

    【解决方案2】:

    怎么样...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多