micneu
Goto Top

Powershell variablen inhalt in eine andere variable speichern

hallo leute,

ich erstelle gerade ein powershell script

hier möchte ich den inhalt einer variable in erine neuen variable speichern

mein script im rohbau
# variablen deklarieren
$start = Get-Date
$ziel = "$env:windir\System32\drivers\etc\"  
$endung = "hosts"  
$LfdNr = 1
$zaehler = 1
##### ip suchen ####
$suchen1 = '192.168.2.6'  
$suchen2 = "192.168.2.5"  
##### ip ersetzen ####
$ersetzen1 = "192.168.3.6´tsrv"  
$ersetzen2 = "192.168.3.5´tmat"  
echo "hosts bearbeiten"  
dir $ziel -filter $endung | 
    ForEach-Object {
        #echo "Datei: $_" 
        $text = Get-Content $_.fullName
        $wertersetzen = '$ersetzen' + $zaehler          
        $wertsuchen = '$suchen' + $zaehler  
        $IP = $text -match $wertsuchen
        $gleich = ($IP -match $wertsuchen)        
        If ($gleich) {
            echo $gleich          
            echo "ip ist gleich"  
            $IP
            $text2 = $text -replace $IP,'$wertersetzen'             
        } Else {
            echo $gleich
            echo "ip ist ungleich"  
        }
        #$LfdNr++
    }
$stop = Get-Date
$gelaufenezeit = ($stop - $start).TotalSeconds
echo "Auftrag nach $gelaufenezeit Sek. erledigt...."  
ich möchte das zeile 19 den variablen wert von zeile 8 bekommt
dies will ich für eine for schleife einsetzen.
(noch nicht mit in den code gebaut.

gruß michael

Content-ID: 139035

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

Printed on: December 12, 2024 at 00:12 o'clock

micneu
micneu Mar 25, 2010 at 23:57:10 (UTC)
Goto Top
hallo leute ich habe es soweit gelöst nur habe ich jetzt das problem das mir mein script den inhalt meiner variable alles in eine zeile schreibt.
hier mein code:

#   **************************************************************
#    einmal auf der powershell ausgeführt werden
#     "Set-ExecutionPolicy Unrestricted" 
#   **************************************************************
#    Get-Content "C:\Windows\System32\drivers\etc\hosts" | ForEach-Object { $_ -replace "192.168.51.*", "test" } | Set-Content test2.txt  
#    
#   **************************************************************
#   * Erstellt M.N. - POWERSHELL / Entwicklung   24.03.2010      
#   **************************************************************
# variablen deklarieren
$start = Get-Date
$ziel = "C:\Windows\System32\drivers\etc"  
#$ziel = "$env:windir\System32\drivers\etc\" 
$endung = "hosts"  
$LfdNr = 1
##### ziel der geänderten datei ####
$export = "C:\Windows\System32\drivers\etc\hosts3"  
#$export = "$env:windir\System32\drivers\etc\hosts" 
$zaehler = 1
##### ip suchen ####
#$suchen = '192.168.'#,'192.168.1.206','192.168.1.205' 
$suchen = '(?i)192.168.51.*',"hans"  
##### ip ersetzen ####
#$ersetzen = ' '#,"192.168.1.206 `t v01-w","192.168.1.4 `t ma" 
$ersetzen = "192.168.1.5 `t pcname","wirst"  
echo "hosts bearbeiten"  

Function checkArray {
    if ($suchen.length -ne $ersetzen.length){
            echo "suchen, ersetzen array ungleich"  
            break
            }Else {echo "such array ist ok"}       
}

function hosts-replace {
    dir $ziel -filter $endung |
        ForEach-Object {
        #echo "Datei: $_" 
        $text = Get-Content $_.fullName        
         for ($x1=0; $x1 -lt $suchen.length; $x1++){
            $ersetze = $ersetzen[$x1]
            $suche = $suchen[$x1]
            $regex = [regex]$suche
            $regex.Matches($text) | % {$_.Value} | Out-String     
            $IP2 = $text -match $suche
            $gleich = ($IP2 -match $suche)
            If ($gleich) {			
                echo "ip ist eingetragen / wird geändert"  
                echo "$suche / $ersetzen"    
                #$text = $text -replace $IP2,$ersetze            
                $text = [regex]::Replace($text,$suche,$ersetze)                
                Write-Output $text >  "C:\Windows\System32\drivers\etc\hosts1"  
                 
                } Else {
                    #echo $1
                    #echo "ip nicht eingetragen" 
                    #echo "wert eintragen: $ersetze" 
                    #$text = $matches + "$ersetze" 
                    #Write-Output $text >  "C:\Windows\System32\drivers\etc\hosts2" 
                }
        }
		Write-Output $text > $export
    }
  }
checkArray
hosts-replace
$stop = Get-Date
$gelaufenezeit = ($stop - $start).TotalSeconds
echo "Auftrag nach $gelaufenezeit Sek. erledigt...."  

wo ist mein fehler.....?

gruß michael
micneu
micneu Oct 27, 2010 at 09:31:40 (UTC)
Goto Top
ich werde das thema demnächst neu anfangen.

gruß michael