none
Powershell Ausgabesprache umstellen RRS feed

  • Frage

  • Hi, ist es möglich die Sprache der PS umzustellen ohne das kompl. System umzustellen?

    Möchte Powershell Skripte zum auslesen von Perf Counters von einem englischen System jetzt auf einem deutschen System verwenden. Problem ist, dass er auf Grund des deutschen System die Perfcounters nicht findet.

    Das Skript extra deswegen anzupassen empfinde ich nicht als Lösung.

    Mfg. Chris

    Donnerstag, 11. Juli 2013 12:50

Antworten

  • Um nur bestimmte Codezeile innerhalb eines Scriptes mit anderen Spracheinstellungen laufen zu lassen, geht das so:

     
    $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
    [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"
    
    # ... Code hier #
    
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
     
     

    Wenn du das komplette Script mit anderen Spracheinstellungen laufen lassen willst, reicht am Anfang des Scriptes:

    [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"
     

    "en-US" ggfls. noch durch die gewünschte Sprache ersetzen.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere gute Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).

    Donnerstag, 11. Juli 2013 13:50
    Moderator
  • Das gilt nur für den aktuellen Thread. D.h. nach der Rückkehr an den Command-Prompt wird die Sprache wieder zurückgesetzt.

    In der Shell müssst du es also so machen:

     
    [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US" ; [System.Threading.Thread]::CurrentThread.CurrentCulture 

    im Script funktioniert es so wie oben beschrieben.

     

    ABER, das hilft dir leider nicht weiter. :) Da ich dank dem Code nun sehe was du eigentlich tun willst, muß ich dir leider sagen das das Ändern der Spracheinstellungen nicht plötzlich die PerfCounter-Namen nach Englisch (oder irgend einer anderen Sprache) übersetzt. Dafür müsstest du ein Sprachpaket installieren und die Systemsprache ändern.

    Man kann wohl die Perfcounter auch über ihre (sprachunabhängige) ID abrufen, diese stehen hier: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib"
    Den Aufwand würde ich aber nur treiben wenn es unbedingt spachunabhängig werden soll.

    Ausserdem kannst dir auch eigene (sprachunabhängige) PerfCounter erstellen, ist auch nicht kompliziert.

    Am einfachsten wird aber wohl sein die Perfcounternamen per SearchAndReplace einfach umzubenennen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere gute Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).


    Donnerstag, 11. Juli 2013 14:47
    Moderator
  • ausgeführt...leider möchte er immer noch von mir den Counter in deutsch...

    So ist es !
    Die Performance Counter Namen sind in der Registry in verschiedenen Sprachen abgelegt!
    Wenn deutsches System dann nur deutsch !
    Man kann sich, glaube ich, andere Sprachen nachinstallieren.
    Das hat Microsoft wirklich SEHR unschön gelöst. :-((

    Der Reg Schlüssel wo du die Perf. Conters findest:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

    Die Ordner mit den Zahlen darin sind die Sprachen 009 ist Englich.

    Jeder von Microsoft mitgelieferte Counter hat einen feste Nummer.
    Diese Nummer sind garantiert.

    Du kannst dir die Nummer mit den folgenden Kommandos abrufen:

    # für englisch 009 (error)
    Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009" -name 'Counter' | Select-Object -ExpandProperty counter
    
    # für die zu Zeit benutzte Sprache
    Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\CurrentLanguage" -name 'Counter' | Select-Object -ExpandProperty counter
    Anhand der Nummer bekommst du also heraus wie der Perf. Counter in deinem System heißt!


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Donnerstag, 11. Juli 2013 15:13
  • Hier noch ein Artikel der dies erklärt:
    (Ob Tobias Weltner hier mit liest? ;-) )

    http://www.powershellmagazine.com/2013/07/19/querying-performance-counters-from-powershell/


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Chris--84 Samstag, 20. Juli 2013 10:32
    Freitag, 19. Juli 2013 16:15

Alle Antworten

  • Um nur bestimmte Codezeile innerhalb eines Scriptes mit anderen Spracheinstellungen laufen zu lassen, geht das so:

     
    $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
    [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"
    
    # ... Code hier #
    
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
     
     

    Wenn du das komplette Script mit anderen Spracheinstellungen laufen lassen willst, reicht am Anfang des Scriptes:

    [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"
     

    "en-US" ggfls. noch durch die gewünschte Sprache ersetzen.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere gute Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).

    Donnerstag, 11. Juli 2013 13:50
    Moderator
  • [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"

    Habe das mal in meiner PS Shell ausgeführt....und dann

    "Get-Counter -ComputerName localhost -Counter "\Processor(_Total)\% Processor Time \System\Processor Queue Length" -SampleInterval 1 -MaxSamples 1"

    ausgeführt...leider möchte er immer noch von mir den Counter in deutsch...

    Mfg. Chris

    Donnerstag, 11. Juli 2013 14:10
  • Das gilt nur für den aktuellen Thread. D.h. nach der Rückkehr an den Command-Prompt wird die Sprache wieder zurückgesetzt.

    In der Shell müssst du es also so machen:

     
    [System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US" ; [System.Threading.Thread]::CurrentThread.CurrentCulture 

    im Script funktioniert es so wie oben beschrieben.

     

    ABER, das hilft dir leider nicht weiter. :) Da ich dank dem Code nun sehe was du eigentlich tun willst, muß ich dir leider sagen das das Ändern der Spracheinstellungen nicht plötzlich die PerfCounter-Namen nach Englisch (oder irgend einer anderen Sprache) übersetzt. Dafür müsstest du ein Sprachpaket installieren und die Systemsprache ändern.

    Man kann wohl die Perfcounter auch über ihre (sprachunabhängige) ID abrufen, diese stehen hier: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib"
    Den Aufwand würde ich aber nur treiben wenn es unbedingt spachunabhängig werden soll.

    Ausserdem kannst dir auch eigene (sprachunabhängige) PerfCounter erstellen, ist auch nicht kompliziert.

    Am einfachsten wird aber wohl sein die Perfcounternamen per SearchAndReplace einfach umzubenennen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere gute Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).


    Donnerstag, 11. Juli 2013 14:47
    Moderator
  • ausgeführt...leider möchte er immer noch von mir den Counter in deutsch...

    So ist es !
    Die Performance Counter Namen sind in der Registry in verschiedenen Sprachen abgelegt!
    Wenn deutsches System dann nur deutsch !
    Man kann sich, glaube ich, andere Sprachen nachinstallieren.
    Das hat Microsoft wirklich SEHR unschön gelöst. :-((

    Der Reg Schlüssel wo du die Perf. Conters findest:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

    Die Ordner mit den Zahlen darin sind die Sprachen 009 ist Englich.

    Jeder von Microsoft mitgelieferte Counter hat einen feste Nummer.
    Diese Nummer sind garantiert.

    Du kannst dir die Nummer mit den folgenden Kommandos abrufen:

    # für englisch 009 (error)
    Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009" -name 'Counter' | Select-Object -ExpandProperty counter
    
    # für die zu Zeit benutzte Sprache
    Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\CurrentLanguage" -name 'Counter' | Select-Object -ExpandProperty counter
    Anhand der Nummer bekommst du also heraus wie der Perf. Counter in deinem System heißt!


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Donnerstag, 11. Juli 2013 15:13
  • Der Vollständigkeit halber:

     

    So erstellst du dir einen eigenen PerfCounter, der so auch unter allen Sprachen funktioniert:

    $proctimeInterval = 100
    
    # Erstellen der Perfcounter
    $proctime = new-object System.Diagnostics.PerformanceCounter “Processor”,“% Processor Time”,"_Total","$($env:computername)"
    
    # Abrufen 
    # ProcTime muß immer über einen angebeben Zeitraum gemessen werden, im Beispiel hier 100 Milisekunden
    [Void]$proctime.NextValue()
    sleep -Milliseconds $proctimeInterval
    $proctime.NextValue()

    Grüße, Denniver 




    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere gute Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).

    Donnerstag, 11. Juli 2013 15:23
    Moderator
  • Ist das Problem damit gelöst, Chris? Wann ja markiere bitte alle Antworten entsprechend.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere gute Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).

    Dienstag, 16. Juli 2013 14:47
    Moderator
  • Hier noch ein Artikel der dies erklärt:
    (Ob Tobias Weltner hier mit liest? ;-) )

    http://www.powershellmagazine.com/2013/07/19/querying-performance-counters-from-powershell/


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Chris--84 Samstag, 20. Juli 2013 10:32
    Freitag, 19. Juli 2013 16:15
  • Ich danke euch allen...sobald ich wieder arbeiten bin, werde ich mir eure Tips, alle nochmal zur Gemüte ziehen.

    Im Endeffekt geht es leider nicht so, wie ich es mir erhofft habe, aber dank euch, habe ich schon entsprechend einen Weg für das Weiter machen.

    Mfg. Chris

    Samstag, 20. Juli 2013 10:36