Zum Inhalt springen

Frage

Geschrieben (bearbeitet)

Hallo,

ich arbeite seit ein Paar tagen an einem Skript in PowerShell(kompletter Neuling) welches das Ablaufdatum der Passwörter(Windows) mit dem momentanen Datum vergleicht.

Ich kann es jedoch nicht starten, da jedes mal folgende Fehlermeldung kommt:

 

 

 Fehler beim Aufrufen der Methode, da [System.DateTime] keine Methode mit dem Namen "substring" enthält.
In C:\Users\MHE\Desktop\Unbenannt1.ps1:12 Zeichen:1
+ $datum = $datum.substring(0,10)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

 

 

Und das auch bei der Funktion Split.

Da ich Komplett neu bin habe ich keine Idee wie ich das fixen kann.

Hier Das Programm:

 

 

net user $env:username /DOMAIN | findstr /C:"Kennwort l" > $env:temp\expiry.txt
# Ablaufdatum wird Aus Net user ausgelesen

$ablaufdatum = (Get-Content $env:temp\expiry.txt)
$ablaufdatum = $ablaufdatum.substring(36,10)
$ablaufdatumtag = [int]$ablaufdatum.split(".")[0]
$ablaufdatummonat = [int]$ablaufdatum.split(".")[1]
$ablaufdatumjahr = [int]$ablaufdatum.split(".")[2]
#Das extrahierte datum wird zurechtgeschnitten, aufgeteilt und in integer gewandelt

$datum = Get-date -Format $datum
$datum = $datum.substring(0,10)
$datumtag = [int]$datum.split(".")[0]
$datummonat = [int]$datum.split(".")[1]
$datumjahr = [int]$datum.split(".")[2]
#Das Momentane Datum wird zurechtgeschnitten, aufgeteilt und in integer gewandelt

if($datumjahr -eq $ablaufdatumjahr)
#Hier Wird nach dem Jahr geprüft
{
    if($datummonat -ge $ablaufdatummonat)
    #Hier Wird nach dem Monat Geprüft
    {
        if($datumtag -ge $ablaufdatumtag)
        #Hier Wird nach dem Tag Geprüft
        {
            msg $env:username Passwort muss Zurückgesetzt werden
        }
        elseif($datumtag + 5  -eq $ablaufdatumtag)
        #Erinnerung 5 Tage vor den Ablaufdatum
        {
            if($datumtag -lt $ablaufdatumtag)
            {
                msg $env:username Passwort muss Zurückgesetzt werden
            }
        }
    }

 

 

}

{
    if($datummonat + 5 -ge $ablaufdatummonat)
    {
        msg $env:username Passwort muss Zurückgesetzt werden
    }
    else
    {
        Exit 0
    }
}

 

Über Hilfe würde ich mich sehr freuen!!

Danke im Vorraus,

Merlin

Bearbeitet von merlin20302
vergessener Apell

7 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben
vor 3 Minuten schrieb merlin20302:

Klappt immer noch nicht aber Danke Für die Antwort.

Der gleiche Fehler wirds aber nicht sein, 
$datum = Get-date -Format $datum
$datum = $datum.Substring(0,10)
echo $datum

gibt das Datum im US-Format zurück. (03.29.2019)

  • 0
Geschrieben

Der Unterschied ist, $ablaufdatum ist ein String $datum ist aber ein DateTime Objekt.

$datum = GetDate -Format $datum

sieht auch nicht so aus als wäre $datum vorher definiert

$datum = (Get-Date -Format 'dd.MM.yyyy').ToString()
oder
$datum = (Get-Date).ToString("yyyy.MM.dd")

dann funktioniert das mit Substring

$datum = Get-date -Format $datum
$datum = $datum.Substring(0,10)
echo $datum

wirft bei mir den gleichen Fehler für substring und das echo liefert dann "Freitag, 29. März 2019 09:59:13"

zum Thema Ablaufdatum noch: Du kannst dir den Umweg über "net user ..." sparen

 $ablaufdatum = (Get-AdUser <accountName> -Properties AccountExpirationDate |select -expand AccountExpirationDate).ToString('dd.MM.yyyy')

 

  • 0
Geschrieben (bearbeitet)

Das schaut bei dir irgendwie... kompliziert aus. Ich habe mir vor Jahren ein Skript gebastelt, das meine User ab 14 Tage vor Ablauf per Mail benachrichtigt, da schaut der Teil mit Dem Datum so aus:

# Ablaufdatum = Zeitpunkt des letzten Passworänderung - Maximales Passwortalter
$ExpiryDate=$_.PasswordLastSet + (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge
	
# Aktuelles Datum abholen
$today=get-date
	
# Restliche Laufzeit = Ablaufdatum (als Datum) - Heutiges Datum (als Datum)
$DaysLeft=$ExpiryDate - $today

(Ja, ich kommentiere jeden Mist, damit ich später auch noch weiß was ich verbrochen habe :) )

Einziger Nachteil den ich bis jetzt feststellen konnte: BA-Studenten die länger abwesend sind bekommen auch nach Ablauf noch die Mails - mit negativen Tagen. Da sich aber noch keiner beschwert hat, lass ich das so.

Bearbeitet von Maniska
  • 0
Geschrieben

In Komplett schaut das Ganze bei mir so aus:

# AD Modul aktivieren
Import-Module ActiveDirectory

# Filtern nach Accounts die aktiv sind und deren Kennwort ablaufen kann
# Auslesen der benötigten Attribute aus dem AD
# Festlegen welche OUs durchsucht werden sollen
# ForEach Cmdlet, nicht die Schleife!
Get-ADUser -filter  {(Enabled -eq $True) -and (PasswordNeverExpires -eq $false)} -properties PasswordLastSet,EmailAddress,GivenName,Surname -SearchBase "OU=XXX,OU=XXX,DC=domain,DC=local" -SearchScope Subtree | ForEach {
	
# Ablaufdatum = Zeitpunkt des letzten Passworänderung - Maximales Passwortalter
$ExpiryDate=$_.PasswordLastSet + (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge
	
	
# Aktuelles Datum abholen
$today=get-date
	
# Restliche Laufzeit = Ablaufdatum (als Datum) - Heutiges Datum (als Datum)
$DaysLeft=$ExpiryDate - $today
			
# Setzen der Variablen, die im Mailtext verwendet werden
# Übrige Tage als Anzahl Tage (.days)
# Automatische Variablen $_.xxx in lokale Variable schreiben, sonst wird es unschön im Mailtext
$display=$daysleft.days
$UserName=$_.GivenName
$SurName=$_.Surname
	
#Wenn Anzahl verbliebener Tage <14
if ($display -lt 15)
{
#Nachrichtentext als Here-String @"..."@ abspeichern 
$MyVariable = @"
Hallo $UserName $SurName,
			
Ihr Kennwort wird in $display Tagen ablaufen, bitte denken Sie daran das Kennwort rechtzeitig zu aendern!
			
Um das Kennwort zu aendern, druecken Sie bitte "STRG + ALT + ENTF" und waehlen Sie die Option  "Kennwort aendern"

An die Kollegen mit mobilen Endgeraeten (iPhone, iPad): Denkt bitte daran, dass ihr auch dort die Passwoerter aendern muesst!
			
Mit freundlichem Gruss,
			
Die IT
"@

# Nachricht verschicken
send-mailmessage -to $_.EmailAddress -from Kennwortwarnung@domain.local -Subject "Achtung! Ihr Kennwort wird in $display Tagen ablaufen" -body $MyVariable  -smtpserver relay.domain.local -encoding ([System.Text.Encoding]::UTF8)
}
}	

 

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...