none
Script in Scheduler tut nicht was es soll RRS feed

  • Frage

  • Hallo,

    ich ahbe folgendes Powershell script

    ForEach($laufwerk in "C:", "E:", "K:", "L:", "M:", "N:", "P:", "Q:")
    {
        If (!(Test-Path $laufwerk))
        {
            Send-MailMessage -To "BD421 <cay.xxxxx@xxxx.ch>" -From "Support <support@xxxxx.ch>" -Subject $laufwerk -Body "Ein Netzlaufwerk ist ausgefallen $laufwerk" -SmtpServer "smtp.xxxxx.ch"
        }
    }

    wenn ich es in der Console ausführe geht es so wie es dort steht.

    Lasse ich es im Schedule laufen schickt er mir für jedes Laufwerk eine Mail obwohl sie vorhanden sind.

    Ich lasse es unter dem gleichen User laufen wie in der Console.

    Ich hoffe auch das es richtig gemacht ist ich möchte prüfen ob diese Netzlaufwerke auch connected sind.

    gruesse

    cay


    Donnerstag, 16. März 2017 14:01

Antworten

  • > ob Netzlaufwerke richtig verbunden sind
     
    Es kann in dem Sinne kein "richtig" geben, da die Antwort davon abhängt was exakt du testen möchtest: ist das Laufwerk für den User sichtbar, unabhängig von den Rechten? Hat der User Leserechte? Schreibrechte? etc...

    Am einfachsten lässt sich ein Test auf Schreibrechte durchführen:

    Function FNcheckWriteAccess ($checkWApath) {
    	$testfile = "$checkWApath\$([guid]::NewGuid().ToString())"
    	if ( New-Item $testfile -Type File -ErrorAction silentlycontinue) { 
    		Remove-Item $testfile
    		return 1 # write-access
      	}
    	else {   
    		return 0 
    	}
    }
     
    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Dienstag, 21. März 2017 12:23
    Moderator
  • Eher so:
    $SollDrives = @("C:","I:","K:","W:", "T:", "Z:");
    
    Function FNcheckWriteAccess ($checkWApath) {
        $testfile = "$checkWApath\$([guid]::NewGuid().ToString())"
        if (New-Item $testfile -Type File -ErrorAction silentlycontinue) { 
            Remove-Item $testfile
            return 1 # write-access
        } else {   
            return 0 
        }
    }
    
    foreach($item in $SollDrives) {
        if (!(FNcheckWriteAccess $item)) {
            #Mail senden...
        }
    }


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    • Als Antwort markiert joksch_c Donnerstag, 23. März 2017 07:10
    Donnerstag, 23. März 2017 06:12

Alle Antworten

  • Hi Cay,

    ich glaube das hier könnte dir helfen.

    # in der Regel verfügbare Laufwerke einsammeln $Laufwerk = Get-PSDrive | Where-Object { ($_.Provider -match "FileSystem") } | Select-Object -ExpandProperty Root # Laufwerke/FileSysteme Überprüfen foreach ($Item in $Laufwerk) { if (!(Test-Path -Path $Item)){ "funzt"

    } else { "funzt nicht"

    Send-MailMessage -To "BD421 <cay.xxxxx@xxxx.ch>" -From "Support <support@xxxxx.ch>" -Subject $Item `
    -Body "Ein Netzlaufwerk ist ausgefallen $Item" -SmtpServer "smtp.xxxxx.ch"

    } }

    Grüße

    Donnerstag, 16. März 2017 15:32
  • Läuft der Task vielleicht mit erhöhten Rechten? Ansonsten: poste mal die Konfiguration des als XML (rechte Maustaste -> exportieren).

     
    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 17. März 2017 02:53
    Moderator
  • Läuft der Task vielleicht mit erhöhten Rechten?

    Der Gedanke ist naheliegend, allerdings würde es nicht erklären, warum die Mail auch für C: kommt, sofern sie für C: kommt ;-)

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 17. März 2017 06:14
  • > sofern sie für C: kommt

    Ebend. :-)


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 17. März 2017 11:59
    Moderator
  • Hallo,

    gerade wieder online gekommen und werde es Testen.


    Und ja es passiert auch mit Laufwerk C:

    gruesse

    Cay



    • Bearbeitet joksch_c Montag, 20. März 2017 09:04
    Montag, 20. März 2017 08:51
  • So wieder da und getestet.

    Kann es sein das du If und else vertauscht hast :)

    Und ich bekomme nur die Lokalen Laufwerke und nicht die Netzlaufwerke angezeigt.

    Ansonsten scheint es jetzt zu funktionieren.

    danke

    Cay


    • Bearbeitet joksch_c Montag, 20. März 2017 09:14
    Montag, 20. März 2017 09:08
  • Moin Cay,

    ja ich glaube da hast du recht, das war nicht mit Absicht.

    Führe das ganze mal als der User aus der das prüfen soll, ich vermute du führst das als Admin aus und hast die Laufwerke die der User haben sollte nicht eingebunden?

    Bei mir gibt er alle eingebunden System- und Netzlaufwerke aus

    Gruß

    Montag, 20. März 2017 09:37
  • Hi,

    ahh mann logisch, danke für die Lösung.

    Beim Ausführen als User zeigt er mir jetzt alles an und läuft auch als Schedule jetzt richtig.

    Geh ich recht in der Annahme das wenn ein Netzlaufwerk nicht erreichbar ist das er mir dann eine Mail nun schickt oder ist das dafür überhauptnicht geeignet ??

    danke

    Cay


    • Bearbeitet joksch_c Montag, 20. März 2017 09:54
    Montag, 20. März 2017 09:51
  • Hi,

    es wird geprüft ob der Pfad existiert, das heißt so viel wie

    (Netzlaufwerk erreichbar = Pfad verfügbar) und (Netzlaufwerk nicht erreichbar = Pfad nicht verfügbar)

    Teste es mal aus aber ich denke das sollte ausreichen dafür.

    Und wenn du möchtest dass er dir eine Mail schickt, musst du Ihm nur sagen ob er es machen soll wenn es funktioniert oder wenn es nicht funktioniert.

    Man könnte das ganze sicherlich noch ausweiten, aber grundsätzlich dürfte das so funktionieren.

    Nova


    • Bearbeitet NovaCode97 Montag, 20. März 2017 10:39
    Montag, 20. März 2017 10:34
  • Sicher geht das jetzt. :)

    Anstatt die Laufwerke zu prüfen die offensichtlich da sein sollen, werden ja auch nur noch die Laufwerke geprüft, die die PoSh-Session gerade sehen kann. :)
    Aber sinnvoll ist das wohl kaum...


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 20. März 2017 15:13
    Moderator
  • Hi,

    stimmt wenn ich einem Laufwerk die Rechte nehme ist es zwar noch da aber es wird kein Fehler gemeldet weil es ja noch verbunden ist aber keine zugriffsrechte mehr hat.

    Das bedeutet ich müsste jeweils einen Schreib oder Lesetest durchführen von den von mir vorgegebenen Laufwerke.

    # in der Regel verfügbare Laufwerke einsammeln $Laufwerk = "C:\, E:\, F:\, G:\" # Laufwerke/FileSysteme Überprüfen foreach ($Item in $Laufwerk) { if (!(Test-Path -Path $Item)){ New-Item $Item"temp\test.txt" #NUN MÜSSTE GEPRÜFT WERDEN OB ER ERSTELLEN KONNTE WENN NICHT DANN EMAIL } else { "funzt nicht" Send-MailMessage -To "BD421 <cay.xxxxx@xxxx.ch>" -From "Support <support@xxxxx.ch>" -Subject $Item ` -Body "Ein Netzlaufwerk ist ausgefallen $Item" -SmtpServer "smtp.xxxxx.ch" } }


    sorry für meine falsche Fragestellung am Anfang

    Oder gibt es eine andere Möglichkeit zu überprüfen ob Netzlaufwerke richtig verbunden sind und auch funktionieren.

    gruesse

    Cay



    • Bearbeitet joksch_c Dienstag, 21. März 2017 09:10
    Dienstag, 21. März 2017 07:43
  • > ob Netzlaufwerke richtig verbunden sind
     
    Es kann in dem Sinne kein "richtig" geben, da die Antwort davon abhängt was exakt du testen möchtest: ist das Laufwerk für den User sichtbar, unabhängig von den Rechten? Hat der User Leserechte? Schreibrechte? etc...

    Am einfachsten lässt sich ein Test auf Schreibrechte durchführen:

    Function FNcheckWriteAccess ($checkWApath) {
    	$testfile = "$checkWApath\$([guid]::NewGuid().ToString())"
    	if ( New-Item $testfile -Type File -ErrorAction silentlycontinue) { 
    		Remove-Item $testfile
    		return 1 # write-access
      	}
    	else {   
    		return 0 
    	}
    }
     
    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Dienstag, 21. März 2017 12:23
    Moderator
  • Hi Denniver,

    ja das würde mirreichen ob er schreiben kann .

    Gehe ich richtig davon aus das die Variable

    $checkWApath

    den Laufwerksbuchstaben enthalten sollte ??

    danke Cay

    Mittwoch, 22. März 2017 13:03
  • Ja. :) Z.b.  "FNcheckWriteAccess D:"
     

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Mittwoch, 22. März 2017 13:46
    Moderator
  • Entschuldige die vielen Fragen aber ich habe erst begonnen mit Powershell und bekomme dann so eine Aufgabe von einem Externen Kunden auch wenn es für manche ein Klks ist für mich ist das schon hohe Mathematik.

    Aber dann soltle das ganze so aussehen oder ??

    $SollDrives = @("C:","I:","K:","W:", "T:", "Z:");
    
    foreach($item in $SollDrives)
    {
        Function FNcheckWriteAccess ($item)
        {
    	    $testfile = "$checkWApath\$([guid]::NewGuid().ToString())"
    	    if ( New-Item $testfile -Type File -ErrorAction silentlycontinue) 
            { 
    		    Remove-Item $testfile
    		    return 1 # write-access
      	    }
    	    else 
            {   
    		    return 0 
    	    }
        }
    }

    recht herzlichen dank

    Cay

    Donnerstag, 23. März 2017 06:08
  • Eher so:
    $SollDrives = @("C:","I:","K:","W:", "T:", "Z:");
    
    Function FNcheckWriteAccess ($checkWApath) {
        $testfile = "$checkWApath\$([guid]::NewGuid().ToString())"
        if (New-Item $testfile -Type File -ErrorAction silentlycontinue) { 
            Remove-Item $testfile
            return 1 # write-access
        } else {   
            return 0 
        }
    }
    
    foreach($item in $SollDrives) {
        if (!(FNcheckWriteAccess $item)) {
            #Mail senden...
        }
    }


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    • Als Antwort markiert joksch_c Donnerstag, 23. März 2017 07:10
    Donnerstag, 23. März 2017 06:12
  • Hallo,

    super so funzt es.

    Ich bedanke mich bei allen dir mir geholfen haben.

    gruesse

    cay

    Donnerstag, 23. März 2017 07:10