首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell:尝试从服务器列表中找到多个驱动器中的文件

Powershell:尝试从服务器列表中找到多个驱动器中的文件
EN

Stack Overflow用户
提问于 2017-09-14 18:37:33
回答 1查看 196关注 0票数 0

我试图(但失败):

  1. 通过迭代列表连接到服务器。
  2. 确认文件存在的位置(3个位置中的一个)。
  3. 替换该文件中的字符串。

我尝试过多种方法。有两件事是我想做的。

有人能帮我理解一下,如果有什么事情我做的效率不高,或者是如何把这一切整合在一起?

这个程序可以遍历服务器并找到文件。

代码语言:javascript
复制
$ErrorActionPreference = 'SilentlyContinue'
$nope=$null
$servers= Get-Content C:\Servers.txt

foreach ($server in $servers)
    {
    If (Test-Connection -ComputerName $server -Quiet)
        {Invoke-Command -ComputerName $server -ScriptBlock {$file=(Get-Childitem -Path C:\DiskSpace.ps1, D:\DiskSpace.ps1, Y:\DiskSpace.ps1); Write-Host "Found $file on $env:computername."}}
    Else {
        Write-Host ">> Could not connect to $server."; $nope += $server}
         }
Write-Host $nope

...and这个至少可以找到一个本地文件

代码语言:javascript
复制
$valid=@('')
$paths = @("C:\Users\user_name\Desktop\DiskSpace.ps1","C:\DiskSpace.ps1","D:\DiskSpace.ps1","Y:\DiskSpace.ps1")

Foreach ($path in $paths) 
{ 
if (Test-Path $path)
    {$valid += $path}
}

write-host $valid

下面是我打算替换字符串的方法:

代码语言:javascript
复制
$ErrorActionPreference = 'SilentlyContinue'

$find=(Get-Childitem -Path C:\, D:\, Y:\ -include DiskSpace.ps1 -Recurse)
Write-Host $find

$ErrorActionPreference = 'Stop'

try {

    (Get-Content $find).replace('bad_email@domain.com', 'good_email@domain.com') | Set-Content $find
}
catch {

}

Get-Content $find
EN

回答 1

Stack Overflow用户

发布于 2017-09-14 19:19:04

你已经拥有了所有的棋子。只需为Get-Content中的每个文件循环您的Invoke-Command命令。

代码语言:javascript
复制
$ErrorActionPreference = 'SilentlyContinue'
$servers = Get-Content C:\Servers.txt
$files = @('C:\DiskSpace.ps1', 'D:\DiskSpace.ps1', 'Y:\DiskSpace.ps1')

$report = foreach ($server in $servers) {
    if (Test-Connection -ComputerName $server -Quiet) {
        $response = Invoke-Command -ComputerName $server -ScriptBlock {
            Get-Childitem -Path $using:files  | ForEach-Object {
                (Get-Content $_).replace('bad_email@domain.com', 'good_email@domain.com') | Set-Content $_
                [PSCustomObject]@{
                    Name = $env:COMPUTERNAME
                    Message = "$($_.fullname) updated."
                }
            }
        }
        if ($response -eq $null) {
            [PSCustomObject]@{
                Name = $env:COMPUTERNAME
                Message = "No files found"
            }
        } else {
            $response
        }
    } else {
        [PSCustomObject]@{
            Name = $env:COMPUTERNAME
            Message = "Unreachable"
        }
    }
}
$report
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46226160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档