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

@Maniska ja viel besser. Einziges Problem wären user die per GPO eine andere Passwortrichtlinie haben.

vor 11 Minuten schrieb Maniska:

nach Ablauf noch die Mails

könnte man ja mit PasswordExpired rausfiltern.

  • 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)
}
}	

 

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...