2017-12-01 4 views
-1

일부 특정 propertie.files의 행을 많이 대체하는 스크립트를 작성하고 있습니다. 이제 거의 끝났지 만 테스트 등을 위해 로그를 작성해야합니다.하지만 아이디어가 없습니다. 나는 기능과 물건 같은 많은 옵션을 찾았지만 이걸 얻지는 못한다. 그래서 네 도움이 필요해.PowerShell이 ​​로그를 작성 중

아마추어에게는 감사드립니다.

#Config.ps1 laden 
. \\imbo\imbo$\03_Applikationen\03_27_customizing_sapbo_script\Umsetzung\config.ps1 



#-----------------------------Input------------------------------------------------------- 

#Abfrage für die Umgebung 
$env = Read-Host -Prompt "@PROD, @INT, @DEV, @ADM, @PRD_EXT, @INT_EXT " 



#-----------------------------Copy-Jobs--------------------------------------------------- 
#Property-Files kopieren 
Copy-Item -Path $propertyfiles -Destination $1war1, $1war2 

#Bilder kopieren 
Copy-Item -Path $sap_logo -Destination 
Copy-Item -Path $post_logo -Destination 
Copy-Item -Path $images_src -Destination $images_dst 

#Custom kopieren 
Copy-Item -Path $custom_src -Destination $custom_dst1, $custom_dst2 


#-----------------------------WAR-Files--------------------------------------------------- 

#WAR-Files 

ForEach($Datei in Get-ChildItem $1war1, $1war2, $2war1, $2war2, $3war1, $3war2, $4war1, $4war2, $5war1, $5war2, $6war1, $6war2, $7war1, $7war2, $8war1, $8war2, $9war1, $9war2, $cluster1, $cluster2) { 

    # Get-Content liest eine Texdatei oder mehrere Zeile für Zeile ein 
    # in der Variablen $Zeilen steht deshalb eine Liste von Zeilen (Array) 
    $Zeilen = Get-Content -Path $Datei.Fullname 
    # Die Datei befindet sich nun Komplett im Speicher (in der Variablen $Zeilen) 
    # deshalb können wir die Datei überschreiben 

    # Zeilen Zähler, wird nur gebraucht um die erste Zeile zu erkennen 
    $ZeilenZähler = 1 

    # jede Zeile abarbeiten 
    foreach($Zeile in $Zeilen) 
    { 
     # Hier findet meine Dateiveränderung statt. 
     # Beispiel: Alle Buchstaben 'a' durch den Buchstaben 'o' ersetzen 
     #.+ ist dazu da um dem Programm zu sagen dass hier eigentlich noch mehr kommt aber dies nicht bekannt ist 
     #\d+ steht für Ziffern aber man weiss auch hier nicht welche 
     if($env -eq '@PROD') { 
      #global.properties 
      $Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" 
      $Zeile = $Zeile -replace "idm.princ=.+/.+","idm.princ=$princp" 
      $Zeile = $Zeile -replace "idm.keytab=D:/sso/.+.keytab","idm.keytab=D:/sso/$princps.keytab" 
      #BIlaunchpad.propertiers, CmcApp.properties, OpenDocument.properties 
      $Zeile = $Zeile -replace "cms.default=.+","cms.default=$env" 
      #Session-Timeouts 
      $Zeile = $Zeile -replace "session-timeout>\d+</session-timeout>","session-timeout>120</session-timeout>" 
      #Kerberos-Filter aktivieren 
      $Zeile = $Zeile -replace "<!--123","" 
      $Zeile = $Zeile -replace "321-->","" 
     } 
     elseif($env -eq '@INT') { 
      #global.properties 
      $Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" 
      $Zeile = $Zeile -replace "idm.princ=.+/.+","idm.princ=$princi" 
      $Zeile = $Zeile -replace "idm.keytab=D:/sso/.+.keytab","idm.keytab=D:/sso/$princis.keytab" 
      #BIlaunchpad.propertiers, CmcApp.properties, OpenDocument.properties 
      $Zeile = $Zeile -replace "cms.default=.+","cms.default=$env" 
      #Session-Timeouts 
      $Zeile = $Zeile -replace "session-timeout>\d+</session-timeout>","session-timeout>120</session-timeout>" 
      #Kerberos-Filter aktivieren 
      $Zeile = $Zeile -replace "<!--123","" 
      $Zeile = $Zeile -replace "321-->","" 
     } 
     elseif($env -eq '@DEV') { 
      #global.properties 
      $Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" 
      $Zeile = $Zeile -replace "idm.princ=.+/.+","idm.princ=$princd" 
      $Zeile = $Zeile -replace "idm.keytab=D:/sso/.+.keytab","idm.keytab=D:/sso/$princds.keytab" 
      #BIlaunchpad.propertiers, CmcApp.properties, OpenDocument.properties 
      $Zeile = $Zeile -replace "cms.default=.+","cms.default=$env" 
      #Session-Timeouts 
      $Zeile = $Zeile -replace "session-timeout>\d+</session-timeout>","session-timeout>120</session-timeout>" 
      #Kerberos-Filter aktivieren 
      $Zeile = $Zeile -replace "<!--123","" 
      $Zeile = $Zeile -replace "321-->","" 
     } 
     elseif($env -eq '@ADM') { 
      #global.properties 
      $Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" 
      $Zeile = $Zeile -replace "idm.princ=.+/.+","idm.princ=$princa" 
      $Zeile = $Zeile -replace "idm.keytab=D:/sso/.+.keytab","idm.keytab=D:/sso/$princas.keytab" 
      #BIlaunchpad.propertiers, CmcApp.properties, OpenDocument.properties 
      $Zeile = $Zeile -replace "cms.default=.+","cms.default=$env" 
      #Session-Timeouts 
      $Zeile = $Zeile -replace "session-timeout>\d+</session-timeout>","session-timeout>120</session-timeout>" 
      #Kerberos-Filter aktivieren 
      $Zeile = $Zeile -replace "<!--123","" 
      $Zeile = $Zeile -replace "321-->","" 
     } 
     elseif($env -eq '@PRD_EXT') { 
      #global.properties 
      $Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" 
      $Zeile = $Zeile -replace "idm.princ=.+/.+","idm.princ=$princpe" 
      $Zeile = $Zeile -replace "idm.keytab=D:/sso/.+.keytab","idm.keytab=D:/sso/$princpes.keytab" 
      #BIlaunchpad.propertiers, CmcApp.properties, OpenDocument.properties 
      $Zeile = $Zeile -replace "cms.default=.+","cms.default=$princpesrv" 
      #Session-Timeouts 
      $Zeile = $Zeile -replace "session-timeout>\d+</session-timeout>","session-timeout>120</session-timeout>" 
      #Kerberos-Filter aktivieren 
      $Zeile = $Zeile -replace "<!--123","" 
      $Zeile = $Zeile -replace "321-->","" 
      #cms.visible BIlaunchpad.properties und CmcApp.properties 
      $Zeile = $Zeile -replace "cms.visible=.+","cms.visible=false" 
      #authentification.visible BIlaunchpad.properties und CmcApp.properties 
      $Zeile = $Zeile -replace "authentication.visible=.+","authentication.visible=false" 
      #authentification.default BIlaunchpad.properties und CmcApp.properties 
      $Zeile = $Zeile -replace "authentification.default=.+","authentification.default=secEnterprise" 
      #PostLogout_html kopieren 
      Copy-Item -Path $logout_src -Destination $logout_dst 
     } 
     elseif($env -eq '@INT_EXT') { 
      #global.properties 
      $Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" 
      $Zeile = $Zeile -replace "idm.princ=.+/.+","idm.princ=$princie" 
      $Zeile = $Zeile -replace "idm.keytab=D:/sso/.+.keytab","idm.keytab=D:/sso/$princies.keytab" 
      #BIlaunchpad.propertiers, CmcApp.properties, OpenDocument.properties 
      $Zeile = $Zeile -replace "cms.default=.+","cms.default=$princiesrv" 
      #Session-Timeouts 
      $Zeile = $Zeile -replace "session-timeout>\d+</session-timeout>","session-timeout>120</session-timeout>" 
      #Kerberos-Filter aktivieren 
      $Zeile = $Zeile -replace "<!--123","" 
      $Zeile = $Zeile -replace "321-->","" 
      #cms.visible BIlaunchpad.properties und CmcApp.properties 
      $Zeile = $Zeile -replace "cms.visible=.+","cms.visible=false" 
      #authentification.visible BIlaunchpad.properties und CmcApp.properties 
      $Zeile = $Zeile -replace "authentication.visible=.+","authentication.visible=false" 
      #authentification.default BIlaunchpad.properties und CmcApp.properties 
      $Zeile = $Zeile -replace "authentification.default=.+","authentification.default=secEnterprise" 
      #PostLogout_html kopieren 
      Copy-Item -Path $logout_src -Destination $logout_dst 
     } 


     # Nur bei der ersten Zeile wird die Alte Datei ("leer") neu angelegt (überschrieben)! 
     If($ZeilenZähler -eq 1) { 
      Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force 
     } 
     Else { 
      # jede weitere Zeile an die neue erstellte Datei anhängen (Parameter Append) 
      Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force -Append 
     } 

     # Zeilenzähler hochsetzen 
     $ZeilenZähler++ 
    } 
} 

답변

0

function Write-Host 
{ 
    [CmdletBinding()] 
    Param 
    ( 
     [Parameter(Mandatory=$true, 
       ValueFromPipelineByPropertyName=$true)] 
     [ValidateNotNullOrEmpty()] 
     [Alias("LogContent")] 
     [string]$Message, 
     [Parameter(Mandatory=$false)] 
     [Alias('LogPath')] 
     [string]$Path='c:\LogFile.log',  #creating Log file with current date 
     [Parameter(Mandatory=$false)] 
     [ValidateSet("Error","Warn","Info")] 
     [string]$Level="Info", 
     [Parameter(Mandatory=$false)] 
     [switch]$NoClobber 
    ) 

    Begin 
    { 
     # Set VerbosePreference to Continue so that verbose messages are displayed. 
     $VerbosePreference = 'Continue' 
    } 
    Process 
    { 
     # If the file already exists and NoClobber was specified, do not write to the log. 
     if ((Test-Path $Path) -AND $NoClobber) { 
      Write-Error "Log file $Path already exists, and you specified NoClobber. Either delete the file or specify a different name." 
      Return 
     } 

     # If attempting to write to a log file in a folder/path that doesn't exist create the file including the path. 
     elseif (!(Test-Path $Path)) { 
      Write-Verbose "Creating $Path." 
      $NewLogFile = New-Item $Path -Force -ItemType File 
      } 

     else { 
      # Nothing to see here yet. 
     } 

     # Format Date for our Log File 
     $FormattedDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss"    

     # Write message to error, warning, or verbose pipeline and specify $LevelText 
     switch ($Level) { 
      'Error' { 
       Write-Error $Message 
       $LevelText = 'ERROR:' 
       } 
      'Warn' { 
       Write-Warning $Message 
       $LevelText = 'WARNING:' 
       } 
      'Info' { 
       Write-Verbose $Message 
       $LevelText = 'INFO:' 
       } 
      } 

     # Write log entry to $Path 
     "$FormattedDate $LevelText $Message" | Out-File -FilePath $Path -Append 
    } 
    End 
    { 
    } 
} 

같은 로그 함수를 정의 할 수 있으며 Write-Host으로이 함수를 호출 할 수 있습니다. Write-Host을 사용할 때마다 해당 내용이 로그 파일에 저장됩니다. 예 :

Write-Host "Execution starts!" 

작성하는 경우 "실행 시작!" 로그 파일에 저장됩니다.

+0

동일한 파일에 있어야하나요, 아니면 스크립트에서로드 할 수 있습니까? –

+0

좋습니다! 작동하지만 어떻게 오류를 감지해야합니까? 어떻게 오류나 경고 또는 정보를 말할 수 있습니까? Foreach 루프에 넣으면 로그 파일에 같은 줄이 많이 있습니다. 한 번만 쓰고 더 멀리 말할 수있는 방법은 무엇입니까? –

+2

이 기능을 하나의 별도 파일에 보관할 수 있습니다. 당신이해야 할 일은 그 파일을 한 번 실행하면 특정 세션에 대한 로그 저장을위한'write-Host' cmdlet가 생성됩니다. –

관련 문제