Puncte:0

Găsiți directorul fișierului țintă pe serverul de la distanță

drapel cn

Încerc să găsesc un director de fișiere pe o listă de servere la distanță. Vreau sa:

  1. Utilizați Powershell; obțineți ținte din fișierul text delimitat prin virgulă, adică server1,file1 Notă: fișierul este diferit pentru fiecare server.
  2. Căutați în partițiile C: și E: un fișier, chiar dacă mai mult de o instanță a acestuia
  3. Obțineți directorul fișierelor
  4. Scrieți rezultatul într-un .csv
  5. Vizualizați rezultatul în fereastra principală Powershell

Iată scenariul cu care am lucrat. Nu pot să-l fac să funcționeze corect. Am nevoie de ajutor:

$scriptpath = $MyInvocation.MyCommand.Path 
$dir = Split-Path $scriptpath
$FileName = "$dir\Servers.txt"
$Data = gc $FileName

foreach ($Row în $Data)
    {
    $Posiție = $Row.IndexOf(",")
    $Server = $Row.Substring(0, $Posiție)
    $File = $Row.Substring($Posiție + 1)

    $CPpart = @{
       Nume = "CPpart"
       Cale = „\$Server\C$”
       #Path = "FileSystem::\$Server\C$"
    }

    $EPpart = @{
       Nume = "EPpart"
       Cale = „\$Server\E$”
       #Path = "FileSystem::\$Server\E$"
    }

    @($CPpart, $EPpart) | Pentru fiecare obiect {
        if ($Server -cum ar fi "*.mydomain.com") {$session = New-PSSession -Computer $Server -Credential MYDOMAIN\userid -ErrorAction Stop}
        else {$Session = New-PSSession -Computer $Server -ErrorAction Stop}
        Invoke-Command -Session $Session -ScriptBlock {$Result = Get-ChildItem -Recurse -Path $_.Path | Unde-Obiect {$_.Name -match '$File'}; returnează $Result}
        $Result
        #$item = Get-ChildItem -Recurse -Path $_.Path | Unde-Obiect {$_.Name -potriviți cu „$Fișier” -și }
        #Write-Host $item
    }
}
    
<#foreach ($Server în $Servers) 
    {
    „\$Server\C$” | Get-ChildItem -recurse -filter $FileList | Selectați Director, Nume | Write-Host $_.Directory + „\” + $_.Nume
    „\$Server\E$” | Get-ChildItem -recurse -filter $FileList | Selectați Director, Nume | Write-Host $_.Directory + „\” + $_.Nume
}

$columnToGet = 0
$coloane = gc $fileName | 
   %{ $_.Split(",")[$columnToGet] }
$coloane
#>
drapel br
aruncați o privire la clasa `CIM_DataFile`. puteți folosi CIM sau WMI pentru a-l apela cu sistemul țintă, unitatea și fișierul... și va returna informații despre ceea ce găsește.
drapel cn
Vă mulțumesc pentru această sugestie. Am citit pe ambele (https://powershell.one/wmi/root/cimv2/cim_datafile) și se pare că sunt prohibitive pentru căutări recursive de la distanță pentru fișiere, deoarece WMI colectează mai întâi întregul conținut al unei partiții înainte de a efectua orice filtrare. (găsirea). Chiar caut pe cineva care să mă ajute să folosesc get-childitem recursiv pe o partiție de server la distanță, sper într-un mod care să nu dureze toată ziua.
drapel br
cmdlet-ul `Get-ChildItem` va trebui, de asemenea, să citească tot volumul pentru a găsi orice fișier _dacă nu cunoașteți arborele director pentru a limita căutarea la_. ///// comanda robocopy cu opțiunea „numai listă” ar fi destul de rapidă ... și - ca cmdletul G-CI - poate fi rulată cu `Invoke-Command` pentru a rula lucrurile în paralel pe fiecare sistem țintă . apoi ar trimite rezultatul final înapoi la sistemul de apelare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.