divinefaith
Goto Top

Datei auf einem Remote Rechner durchsuchen

Moin ich habe folgendes problem: Ich möchte remote auf einem Rechner einen Pfad nach einem Bestimmten wort in dem Dateinamen oder im Inhalt suchen.
Nur erhalte ich immer einen Fehler bzgl. Winrm quickconfig
Gibt es auch einen anderen Weg, wie man vielleicht dem winrm ausweichen könnte?

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Textbox'  
$form.Size = New-Object System.Drawing.Size(350,200)
$form.StartPosition = 'CenterScreen'  

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'  
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(160,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'  
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(320,20)
$label.Text = 'Please enter the word you are searching for:'  
$form.Controls.Add($label)

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,60)
$textBox.Size = New-Object System.Drawing.Size(285,80)
$form.Controls.Add($textBox)

$form.Topmost = $true

$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()

#Put User Input in a variable
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $UserInput = $textBox.Text
}

#Select the path where the word is to be searched for


Invoke-Command -ComputerName P999CZC7329C0K {$Directory = "C:\Program Files (x86)\Common Files\enteo\NiLogs"  

#Execute query and store complete paths of applicable files in variable $files
$files = Get-ChildItem -LiteralPath $Directory -File -Recurse -Force | ?{$_.Name -like "*$UserInput*" -or (Select-String $_.FullName -Pattern $UserInput -SimpleMatch -Quiet)} | select -Expand Name  

#Use Result
$files

#Case if the word wasn't found  
if(!$files){echo "nothing was found"}  
else{$files}
}

Content-ID: 4078392135

Url: https://administrator.de/contentid/4078392135

Ausgedruckt am: 08.11.2024 um 01:11 Uhr

Doskias
Doskias 27.09.2022 um 15:24:35 Uhr
Goto Top
Moin,

leider versteckst du die Fehlermeldung, das eigentlich wichtige, vor uns. So wie du es schreibst vermute ich, dass WINRM deaktiviert ist. Dann funktioniert es natürlich aus Sicherheitsgründen nicht. Demnach fragst du also, ob es einen Weg gibt, die Sicherheitseinstellungen von Microsoft zu umgehen und ein PS-Befehl trotz deaktiviertem WINRM durchzuführen? Hab ich dich richtig verstanden?

Gruß
Doskias
mbehrens
mbehrens 27.09.2022 um 16:13:31 Uhr
Goto Top
Zitat von @DivineFaith:

Moin ich habe folgendes problem: Ich möchte remote auf einem Rechner einen Pfad nach einem Bestimmten wort in dem Dateinamen oder im Inhalt suchen.
Nur erhalte ich immer einen Fehler bzgl. Winrm quickconfig
Gibt es auch einen anderen Weg, wie man vielleicht dem winrm ausweichen könnte?

Remoting per SSH könnte eine Möglichkeit sein.
colinardo
Lösung colinardo 27.09.2022 aktualisiert um 16:49:23 Uhr
Goto Top
Servus.
Die Verwendung von "Invoke-Command" benötigt zwingend aktiviertes PSRemoting auf der Remote-Maschine.
Wenn du aber sowieso nur einen Pfad durchsuchen musst nimm doch die administrativen Freigaben des Remotehosts (Vorher prüfen ob aktiviert und der Account der das Skript ausführt remote die nötigen Rechte besitzt).
\\P999CZC7329C0K\c$\dein\pfad

Btw. Die Verwendung der lokalen Variablen im Invoke-Command ist bei dir sowieso fehlerhaft denn sie sind im remote Script-Block nicht vorhanden 😉.
Die sprichst du dort im einfachsten Fall über das Vorstellen von "using" im Remote-Scriptblock an, oder verwendest die erweiterten Parameter von Invoke-Command zur Übergabe von Variablen
$using:Directory
about_Remote_Variables

Grüße Uwe
DivineFaith
DivineFaith 28.09.2022 um 07:58:53 Uhr
Goto Top
Danke hat jetzt funktioniert.