Quantcast
Channel: Windows PowerShell Forum
Viewing all 2314 articles
Browse latest View live

Dateien mit unterschiedlichen Endungen löschen

$
0
0

Hallo,

folgendes Problem:

die Software mit der ich meine defekte Festplatte ausgelesene habe, hat mir alle Dateien mit Duplikate bis 15 mal ausgespuckt. Sieht so aus:

datei
datei0
datei1
datei2
datei3
usw.

ich habe mir folgendes ausgedacht und so würde ich auch gerne vorgehen:

1. Sortieren nach Name (wie im Bsp zu sehen)
2. remove die nächsten Dateien solange (Endung=keineZahl OR ZahlDanach<ZahlDavor)

Ich wollte aus den Vorlagen etwas zusammen basteln aber verstehe leider zu wenig von der Sprache :(

Vielen Dank im Voraus!

VG
Yakup


Lokales Auslesen von Terminen freigegebener Outlook-Kalender

$
0
0

Hallo zusammen,
bei uns in der Firma nutzen wir Outlook als Mail-Client.
Neben meinem eigenen Kalender kann ich jederzeit über das Adressbuch
die Kalender der Kollegen anzeigen lassen (allerdings nicht im Detail, also nur
"gebucht").
Heute habe ich ein PowerShell Skript geschrieben, das mir für einen im Code
angegebenen Zeitraum meine Termine auflistet.
Jetzt frage ich mich, wie ich die geblockten Zeiten eines Kollegen per PowerShell
ausgeben lassen kann. Mein Skript müsste also um den Namen des Kollegen
erweitert werden.

Mein Skript sieht wie folgt aus

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type] 
$outlook = new-object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")
$folder = $namespace.getDefaultFolder($olFolders::olFolderCalendar)
$folder.items | Select-Object -Property Subject, Start | where-object { $_.start -gt [datetime]"6/1/2020" -AND $_.start -lt [datetime]"6/19/2020" } | sort-object Start
Wie bekomme ich sowas z.B. für den eingebundenen Kalender von "Hans Wurst"?

Danke und Gruß
DD


Skript Befehl für das Abarbeiten aller Dateien in einem Verzeichnis

$
0
0

Hallo Zusammen,

ich habe ein PS7 Skript und möchte nicht jedes mal die Verzeichnisse in dem Skript per Hand ändern müssen für jede Datei in dem Verzeichnis. Wie muss ich das Skript aufbauen bzw. welchen Befehl benötige ich, dass jede Datei einem Verzeichnis nacheinander abgearbeitet werden?

Der Skript Code lautet wie folgt:

$pfad = "C:\Users\Inspiron\Desktop\PV-Heater-Logger\2020\06\10.log"
$daten = get-content -Path $pfad -AsByteStream
Write-Host "Die Datei enthält $($daten.Count) Zeilen."
$ds = ($daten.Count-2)/198
Write-Host "Das sind $ds DS."
#Überschrift in Datei
$out = "Key" + ";" + "Datum" + ";" + "Uhrzeit" + ";" + "DC-Leistung 1" + ";" + "DC-Leistung 2" + ";" + "DC-Leistung 3" + ";" + "var4" + ";" + "Wassertemp" + ";" + "Int Temp" + ";" + "Kuehlkoerpertemp" + ";" + "Ext Temp 1" + ";" + "Ext Temp 2" + ";" + "DC Spannung 1" + ";" + "DC Spannung 2" + ";" + "DC Spannung 3" + ";" + "Gesamtleistung " + ";" + "Energie Gen 1" + ";" + "Energie Gen 2" + ";" + "Energie Gen 3" + ";" + "Energie Tag" + ";" + "var18" + ";"
$out >> "C:\Users\Inspiron\Desktop\PV-Heater-Logger\2020\10.csv"

for ($k = 1; $k -le $ds; $k++)
{
    $k1 = $k + 1 + ($k-1) * 197
    $k2 = $k + 2 + ($k-1) * 197
    $k3 = $k + 3 + ($k-1) * 197
    $k4 = $k + 4 + ($k-1) * 197
    #Write-Host $k1, $k2, $k3, $k4

    $datumb = ("0x" + "{0:x2}{1:x2}{2:x2}{3:x2}" -f $daten[$k1], $daten[$k2], $daten[$k3], $daten[$k4])
    $datum = (Get-Date 01.01.1970 )+([System.TimeSpan]::fromseconds($datumb)) 
    $datums = get-date $datum -Format "yyyyMMdd"
    $jamota = get-date $datum -Format "yyyy.MM.dd"
    $uhrzeit = get-date $datum -Format "HH:mm"
    $var1 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+24)] ,$daten[($k3+24)], $daten[($k2+24)], $daten[($k1+24)]), 0))
    $var2 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+34)] ,$daten[($k3+34)], $daten[($k2+34)], $daten[($k1+34)]), 0))
    $var3 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+44)] ,$daten[($k3+44)], $daten[($k2+44)], $daten[($k1+44)]), 0))
    $var4 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+54)] ,$daten[($k3+54)], $daten[($k2+54)], $daten[($k1+54)]), 0))
    $var5 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+64)] ,$daten[($k3+64)], $daten[($k2+64)], $daten[($k1+64)]), 0))
    $var6 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+74)] ,$daten[($k3+74)], $daten[($k2+74)], $daten[($k1+74)]), 0))
    $var7 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+84)] ,$daten[($k3+84)], $daten[($k2+84)], $daten[($k1+84)]), 0))
    $var8 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+94)] ,$daten[($k3+94)], $daten[($k2+94)], $daten[($k1+94)]), 0))
    $var9 =  "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+104)] ,$daten[($k3+104)], $daten[($k2+104)], $daten[($k1+104)]), 0))
    $var10 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+114)] ,$daten[($k3+114)], $daten[($k2+114)], $daten[($k1+114)]), 0))
    $var11 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+124)] ,$daten[($k3+124)], $daten[($k2+124)], $daten[($k1+124)]), 0))
    $var12 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+134)] ,$daten[($k3+134)], $daten[($k2+134)], $daten[($k1+134)]), 0))
    $var13 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+144)] ,$daten[($k3+144)], $daten[($k2+144)], $daten[($k1+144)]), 0))
    $var14 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+154)] ,$daten[($k3+154)], $daten[($k2+154)], $daten[($k1+154)]), 0))
    $var15 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+164)] ,$daten[($k3+164)], $daten[($k2+164)], $daten[($k1+164)]), 0))
    $var16 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+174)] ,$daten[($k3+174)], $daten[($k2+174)], $daten[($k1+174)]), 0))
    $var17 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+184)] ,$daten[($k3+184)], $daten[($k2+184)], $daten[($k1+184)]), 0))
    $var18 = "{0:n2}" -f ([System.BitConverter]::ToSingle(($daten[($k4+194)] ,$daten[($k3+194)], $daten[($k2+194)], $daten[($k1+194)]), 0))
    #Daten für Datei
    $out = $datums + ";" + $jamota + ";" + $uhrzeit + ";" + $var1 + ";" + $var2 + ";" + $var3 + ";" + $var4 + ";" + $var5 + ";" + $var6 + ";" + 
    $var7 + ";" + $var8 + ";" + $var9 + ";" + $var10 + ";" + $var11 + ";" + $var12 + ";" + $var13 + ";" + $var14 + ";" + 
    $var15 + ";" + $var16 + ";" + $var17 + ";" + $var18 + ";"
    $out >> "C:\Users\Inspiron\Desktop\PV-Heater-Logger\2020\10.csv"
 } 

Write-Host "FERTIG"
Danke

Verbindung PowerShell / Netezza

$
0
0

Hallo allseits,

vorab, ich bin ein blutiger Anfänger was Powershell betrifft, also sorry für eine ev. "dumme" Frage ...

Wir haben in unserem Netz eine Netezza-DB, auf die ich mittels JDBC problemlos zugreifen kann (z.B. mit Squirrel) - ich scheitere aber an einer Connection mittels PowerShell ...

Die korrekte JDBC-URL sieht so aus:

jdbc:netezza://blablubb.at:5480/test_db

Ich habe also in PS folgendes probiert:

$server="blablubb.at"
$database="test_db"
$port="5480"
$user="testuser"
$password="StrengGeheim"

$query="select * from bdv.BAD_DATA_REPORT_V order by 1,2,3"
$dbconnectionstring="{NetezzaSQL};servername=$server;port=$port;database=$database;username=$user;password=$password"

Invoke-Sqlcmd -HostName $server -ServerInstance $serverName -Database $database -Query $query -Username $user -Password $password -verbose | Export-Csv "C:\Users\31300035\PowerShell\TestScripts\004_test_sql_output.csv" -Delimiter "," -NoTypeInformation

Das funktioniert aber so nicht, ich bekomme folgende Fehlermeldung:

"Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server
wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. ..."

Any hints?

Danke u. LG., Michael

XML to String - Neuland für mich

$
0
0

Hallo zusammen,

wie bereits aus dem Titel zu entnehmen ist, stehe ich vor dem Problem einen Wert aus einer XML-Datei in einen String zu wandeln. In meinem Problem geht um die Anpassung des Lan Adapter Namen. Folgendes habe ich geschrieben:

$NIC = Get-NetAdapter
Get-NetAdapter -Name $NIC.Name | Rename-NetAdapter -NewName "$TestXML.Test.AdapterName"

Hinter der Variable "$TestXML.Test.AdapterName" verbirgt sich der Wert "LAN". Führe ich die Zeilen aus, erhalte ich den Namen "[string]System.Xml.XmlDocument.TestXML.Lab.Test.AdapterName".

Bitte rettet meinen Tag mit einer Lösung zu meinem Problem. :)

Vielen Dank im voraus.

Cheers

Import-CSV

$
0
0

Hallo,
ich würde gerne aus einer *.csv Datei E-Mail Kontakte im AD erstellen.
Die CSV ist wie folgt aufgebaut:

ANZEIGENAME,POSTFACHTYP,E-MAIL,ADRESSE,FIRMA,LAND/REGION,ABTEILUNG,VORNAME,NACHNAME,TELEFON,POSTLEITZAHL                                                                                                                                                        

Ich habe folgendes Skript als Beispiel gefunden:

Import-Csv “contacts.csv” | ForEach {New-MailContact -Name $_.Name -Firstname $_.FirstName -LastName $_.LastName -ExternalEmailAddress $_.ExternalEmailAddress -OrganizationalUnit “Domainname/OUname”}

Mir ist jetzt nicht ganz klar wie ich das anhand meiner *.csv ersetzen muss? -Firstname $_.FirstName ersetzen durch -Vorname $_.Vorname?
Wie lauten dann die Variablen f. Anzeigename, Firma, Adresse, Land/Region, Abteilung, Telefon, Postleitzahl...…

Danke und Gruß Dennis


check is numeric 5 stellig

$
0
0

moin,

wie kann ich im Powershell überprüfen ob ein Wert nur 5 stellig numeric ist.

if($user.SamAccountName -match "\d{5}"){

bringt leider auch Mobile06040 ?


Chris

Probleme mit Where Klausel

$
0
0

moin,

ich komme irgendwie mit eine Where leider nicht weiter

In MS-Access oder SQL sind solche Bedingen relativ einfach.

where {$_.Anwendungen -notlike "CORONA" -and $_.PcName -like "PC*"

bringt das als Ergebnis

ich habe es auch schon mit notmatch probiert. Auch hier kommen leider auch Datensätze mit Corona.  Das CmdLet wurde von einem Kollegen mittels C# erstellt und greift auf eine Oracle DB zu. Kann es sein, dass das Feld/Property  Anwendungen kein String ist und daher die Where Klausel nicht richtig funktioniert?

InventarNr             : 4324374
Kategorie              : PC-NETZ
PcName                 : PC11
EthernetAdr            : 5065F34E8
IpAdresse              : 10.1.1.2
Bemerkung              : Intel i219
Vorname                : MaX
Famname                : Mustermann
BenutzerNr             : Mustermann

Anwendungen            : {CORONA, INTRNET, AKT2000, OFFICE...}
MacBytes               : {80, 101, 243, 38...}
IpBytes                : {10, 160, 216, 238}


Chris


Powershell Fenster unterdrücken

$
0
0

Hallo an Alle

Leider habe ich auf meine Frage bis jetzt keine funktionierende Antwort gefunden oder aber ich bin zu blöd die Puzzleteile zusammen zu setzen.

Ich habe eine Batch Datei erstellt, in der ich unter anderem mehrere Powershell Script starte.

Dazwischen hat es immer noch andere Befehle die in der Reihenfolge ausgeführt warden sollen.

Nun erscheint aber bei jedem Start eines der Powershell Scripts ein blaues Fenster und zeigt was er da so abarbeitet.

Das interessiert den User nicht resp. verwirrt diesen nur.

Also sollen diese Fenster nicht angezeigt warden resp. unterdrückt werden.

Aber wie?

Das Powershell Script rufe ich mit folgendem Befehl auf.

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\Test.ps1""'}"

Danke für jeden Tipp

Trix

Strange behaviour when using get-certificate with variables

$
0
0

Hi all,

I got a strange behaviour when using get-certificate with variables
I use this short code:

$certnames = import-csv "crtnames.csv" -delimiter ";" $mypwd = ConvertTo-SecureString -String "PWDSecure!" -Force -AsPlainText ForEach ($cert in $certnames) { #Create Certificate $subjectname = "C=CH,O=Company,CN="+$cert.CN+",DC=domain,DC=net" $subjectname $dnsname = $cert.SAN1+","+$cert.SAN2+","+$cert.SAN3+","+$cert.SAN4+","+$cert.SAN5

# alternative way, also not working:
# $dnsname = $cert.SAN1,$cert.SAN2,$cert.SAN3,$cert.SAN4,$cert.SAN5 -join(",")

$dnsname Get-Certificate -SubjectName $subjectname -DnsName $dnsname -Template "Webserver" -CertStoreLocation "Cert:\LocalMachine\My" -URL "ldap:///CN=Domain_CertificateAuthority" # Export certificate with private key $SAN3 = $cert.san3 $certfile = "C:\temp\mgt\"+$SAN3+".pfx" $CertToExport = Get-ChildItem -Path cert:\LocalMachine\My | ?{ $_.Subject -Like "*CN=$SAN3*"} Export-PfxCertificate -Cert $CertToExport -FilePath $certfile -Password $mypwd -Verbose }

The importfile is like this:

No;CN;SAN1;SAN2;SAN3;SAN4;SAN5
1;server.domain.net;server2.domain.net;server3.domain.net;server;server2;server3

When importing the requests, they will be genrated w/o problems, but the SAN are not generated correctly.
In the final certficate will appear als one entry, like this:

DNS= server2.domain.net,server3.domain.net,server,server2,server3

and not like this:

DNS=server2.domain.net
DNS=server3.domain.net
...

But, if try to generate the certificate with direct input instead of variables, it is working like expected:

Get-Certificate -SubjectName $subjectname -DnsName server2.domain.net,server3.domain.net,server,server2,server3 -Template "Webserver" -CertStoreLocation "Cert:\LocalMachine\My" -URL "ldap:///CN=Domain_CertificateAuthority"

Any ideas?
It seems, that the string expected at -DnsName is not accepting any variables.
Thanks for the help...



Windows / Exchange / Lync/Skype Dinosaur

Split mit ganzen Satz als Delimeter

$
0
0

Ich knobel hier schon eine ganze Zeitlang rum - ohne Erfolg wie man sieht.

Und zwar möchte ich eine Textdatei mit Get-Content einlesen und diese dann bei Vorkommen eines Satzes "Hier ist die Trennzeile" in 2 Teile zertrennen.

Split("Hier ist eine Trennzeile") sorgt aber dafür dass bei allen 4 enthaltenen Wörtern: "Hier" "ist" "eine" "Trennzeile" splittet - nicht am Vorkommen des kompletten Satzes.

Wie also muss ich Split aufrufen damit es klappt wie ich es gerne hätte?

Funktion wird beim ersten Durchlauf in der Windows PowerShell ISE nicht erkannt

$
0
0

Hallo

ich hätte eine Frage zu PowerShell-Scripte und eigenen Funktionen:

mir fällt auf, dass wenn ich eine Funktion (habe die Funktion am Ende des Scripts gestellt) erstelle und diese in späterer Folge in meinem Script mit Aufrufen verwenden möchte, habe ich beim ersten Mal immer Fehlermeldungen  - dass die Funktion nicht vorhanden wäre.

Starte ich danach in der ISE das Script zur Ausführung gleich nochmals, funktioniert alles einwandfrei.

Muss hier in der ISE vorab so eine Art "compile" laufen, damit alle Funktionen in dem Script bekannt sind.....? Oder woran liegt das?

Kann mir dazu bitte hier vielleicht jemand weiterhelfen.

Danke schon mal & schönen Gruß,

Michael

Verstaendnisproblem / Export-Excel

$
0
0

Hallo allseits,

ich konnte mein Problem zwar selbst lösen, warum aber meine ersten Versuche dazu nicht klappten, kann ich nicht sagen, da hab ich rundherum noch einige Verständnisprobleme - wäre nett, wenn mir da jemand etwas weiterhelfen könnte. Der Reihe nach:

Ich habe ein Script geschrieben, welches Daten aus einer DB (Netezza, eine Fremd-DB von IBM) ausliest, und diese Daten in ein Excel schreibt. Mein erster Versuch, der die Daten mal nur in ein CSV schreibt, sieht so aus:

[code]function Get-ODBC-Data{
    param(
        [string]$query=$(throw 'sql-query is required.'),
        [string]$dsn
    )
    $conn = New-Object System.Data.Odbc.OdbcConnection
    $conn.ConnectionString = "DSN=$dsn;"
    try
    {
        $conn.open()
        $cmd = New-object System.Data.Odbc.OdbcCommand($query,$conn)
        $ds = New-Object system.Data.DataSet
        (New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($ds) | out-null
        $conn.close()
    }
    catch
    {
        $fehler = $_
        Write-Host ("### ABGEFANGENER FEHLER: " + $_.Exception.Message) -ForegroundColor yellow
    }
    
    # Zurückgegeben wird das DataSet
    $ds.Tables[0]
}

# Daten von Netezza abholen und in CSV-File schreiben ...

$sqlCommand="select * from bdv.BAD_DATA_REPORT_V order by 1,2,3"

Get-ODBC-Data $sqlCommand "NZSQL" | Export-CSV -Path "C:\File01.csv" -NoTypeInformation[/code]

Das geschriebene CSV sieht gleich wirklich gut aus, ich bekomme die Daten genau so, wie ich sie dann auch im Excel haben will. Hier ein kurzer Auszug der erzeugten Datei file01.csv

[code]"STP","MDIF","FELD","WERT","KOMMENTAR","MDIF_PAKET","IMPORTZEIT"
"INPVS","VSSTAMMJAHR","vsPersID","","Mandatory Felder nicht bef?llt","INPVS_VSStammJahr_HVB_1_1_32_20200626_20200626.mdif","02.07.2020 12:25:07"
"INPVS","VSSTAMMJAHR","vsPersID","","Mandatory Felder nicht bef?llt","INPVS_VSStammJahr_HVB_1_1_32_20200703_20200703.mdif","08.07.2020 12:58:13

......."[/code]

Die erste Zeile ist die HeaderZeile mit den DB-Feldnamen, dann kommen die Daten, genau so will ich das auch. Also nur noch "Export-CSV" durch "Export-Excel" ersetzen, dann müsste ja alles richtig funktionieren. Also so:

Get-ODBC-Data $sqlCommand "NZSQL" | Export-Excel -Path "C:\File01.xlsx"

Das erzeugt mir aber einige *zusätzliche* Spalten (RowError, RowState, Table, ItemArray, HasErrors). Ich sehe diese zusätzlichen Spalten auch NICHT, wenn ich folgendes ausprobiere:

(Get-ODBC-Data $sqlCommand "NZSQL")[0]

Ich habe dann versucht, nur mehr die benötigten Spalten (woher kommen RowError usw.??) mittels "Format-Table" zu selektieren, also so:

Get-ODBC-Data $sqlCommand "NZSQL" | ft STP, MDIF, FELD | Export-Excel -Path "C:\File01.xlsx"

Das aber dürfte komplett falsch sein, da bekomme ich in's generierte Excel nur mehr "interne Klasseninformationen" und nichts von meinen Daten ...

Die Lösung dieses Problems hab ich dann im Netz gefunden, richtig funktioniert's mit "Select-Object", also so:

[code]Get-ODBC-Data $sqlCommand "NZSQL" |
Select-Object * -ExcludeProperty RowError, RowState, Table, ItemArray, HasErrors |
Export-Excel -Path "C:\\File01.xlsx"[/code]

Die Fragen die ich da habe:

- Woher kommen die überzähligen Felder, die ich beispielsweise bei (Get-ODBC-Data $sqlCommand "NZSQL")[0] NICHT habe, her?

- Warum funktioniert mein erster Ansatz mit "Format-Table" nicht, bzw. was bekomme ich da eigentlich angezeigt?


Powershell - Bei bestehenden Usern einen Vorgesetzten (Manager) einpflegen

$
0
0

Hallo vorher noch gesagt, ich bin eher neu was Powershell angeht deshalb habt mit mir bitte Geduld. 

Wie der Titel schon sagt möchte ich gern bei mehreren Usern in unserem Active Directory einen Vorgesetzten (Manager) einpflegen. Da es sich später um mehrere hunderte User handelt gibt es eine .csv wo nur der SamAccountName und der einzupflegende Manager drin stehen (Ja, sowohl die User wo der Manager hinterlegt werden soll als auch die Manager selber existieren bereits im Active Directory) 

Momentan sieht es so aus:

Import-Module ActiveDirectory
$Users = Import-csv hier steht der Pfad -Delimiter ';'

foreach ($User in $Users)
 {
 $Username = $User.SamAccountName
 $Manager = $User.NewManager

 Set-ADUser $Username -Replace @{'Manager' = $Manager}
 }

Folgenden Fehler erhalte ich:

Set-ADUser : Der Namensverweis ist unzulässig
In hier steht der Pfad:9 Zeichen:2
+  Set-ADUser $Username -Replace @{'Manager' = $Manager}+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (xxx.xxx:ADUser) [Set-ADUser], ADException+ FullyQualifiedErrorId : ActiveDirectoryServer:8373,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Da mein momentanes Wissen was Powershell angeht sehr gering ist, stellt der Fehler mich vor eine Hürde wo ich von alleine nicht weiter weiß, Danke im Voraus für jede Hilfe.

Abfrage einer System.Collections.ArrayList

$
0
0

Hallo zusammen,

wie kann man ein Array abfragen um Werte abzufragen?

Ich möchte die Spalte ID abfragen von einer Zeile mit bestimmten Eintrag in Name, quasi wie in etwa:

$testid = $BestandsListe.ID where $BestandsListe.Name -like "Testeintrag 9"

Als Beispiel habe ich das Array wie folgt erstellt:

$BestandsListe = New-Object -TypeName System.Collections.ArrayList
for ($i=1; $i -le 10; $i++) {
    [void]$BestandsListe.Add([PSCustomObject]@{  
        Datum=Get-Date;
        ID=$i;
        Name="Testeintrag $i";
        Gruppe="Test-Gruppe $i";
        Erstellt="Nein"
    })
}

Im Moment mache ich das so, was etwas umständlich erscheint, aber eventuell nur so möglich ist:

$testid=$BestandsListe.ID[$BestandsListe.Name.IndexOf("Testeintrag 9")]

Get das auch besser oder eleganter?

Viele Grüsse,
Daniel



Powershell Multiple URL Screenshot

$
0
0

I need a powershell script that opens multiple URLs in Firefox, takes a screenshot of each page and places it on a specific path. I've already built it for 1 Url and an multiple interval Screenshot. I dont know how to change it for more URLs: 

[system.Diagnostics.Process]::Start("firefox","https://developers.google.com/speed/pagespeed/insights/?hl=de&url=https%3A%2F%2Fwww.jaz-hotel.com%2Fhotels%2Fjaz-in-the-city-amsterdam")#region Function definitions
Function Get-ScreenShot

    [CmdletBinding(DefaultParameterSetName='Directory', PositionalBinding=$false)]
    Param(
        [Parameter(ParameterSetName='File')]
        [Parameter(Mandatory=$false, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False)]
        [ValidateScript({$_  -match "\.(bmp|gif|jpg|png|wmf)$"})]
        [string]$FullName,

        [Parameter(ParameterSetName='Directory')]
        [Parameter(Mandatory=$false, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False)]
        [string]$Directory,

        [Parameter(ParameterSetName='Directory')]
        [parameter(Mandatory=$false)]
        [ValidateSet('bmp','gif','jpg','png','wmf')]
        [String]$Format='png',

        [Parameter(ParameterSetName='Directory')]
        [parameter(Mandatory=$false)]
        [ValidateScript({$_ -ge 0})]
        [int]$DurationInSeconds=0,

        [Parameter(ParameterSetName='Directory')]
        [parameter(Mandatory=$false)]
        [ValidateScript({$_ -ge 0})]
        [int]$IntervalInSeconds=0,

        [parameter(Mandatory=$false)]
        [ValidateSet('VirtualScreen','WorkingArea')]
        [String]$Area='WorkingArea',

        [parameter(Mandatory=$false)]
        [Switch]$Beep
    )

    
    Add-Type -AssemblyName System.Windows.Forms
    Add-type -AssemblyName System.Drawing
    # Gather Screen resolution information
    #$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen
    #$Screen = [System.Windows.Forms.SystemInformation]::WorkingArea
    $Screen = [System.Windows.Forms.SystemInformation]::$Area
    $Width = $Screen.Width
    $Height = $Screen.Height
    $Left = $Screen.Left
    $Top = $Screen.Top
    $TimeElapsed = 0
    $IsTimeStampedFileName = $false
    if ($FullName)
    {
        $Directory = Split-Path -Path $FullName -Parent
        $HasExtension = $FullName -match "\.(?<Extension>\w+)$"
        if ($HasExtension)
        {
            $Format = $Matches['Extension']
        }
        New-Item -Path $Directory -ItemType Directory -Force | Out-Null
    }
    elseif ($Directory)
    {
        New-Item -Path $Directory -ItemType Directory -Force | Out-Null
        $FullName = Join-Path -Path $Directory -ChildPath $((get-date -f yyyyMMddTHHmmss)+".$Format")
        $IsTimeStampedFileName = $true
    }
    else
    {
        $Directory = [Environment]::GetFolderPath('MyPictures')
        Write-Verbose "Target directory not specified we use [$Directory]"
        $FullName = Join-Path -Path $Directory -ChildPath $((get-date -f yyyyMMddTHHmmss)+".$Format")
        $IsTimeStampedFileName = $true
    }

    switch ($Format)
    {
        'bmp' { $Imageformat= [System.Drawing.Imaging.ImageFormat]::Bmp; }
        'gif' { $Imageformat= [System.Drawing.Imaging.ImageFormat]::Gif; }
        'jpg' { $Imageformat= [System.Drawing.Imaging.ImageFormat]::Jpeg; }
        'png' { $Imageformat= [System.Drawing.Imaging.ImageFormat]::Png; }
        'wmf' { $Imageformat= [System.Drawing.Imaging.ImageFormat]::Wmf; }
    }

    do
    {
        # Create bitmap using the top-left and bottom-right bounds
        $Bitmap = New-Object -TypeName System.Drawing.Bitmap -ArgumentList $Width, $Height

        # Create Graphics object
        $Graphic = [System.Drawing.Graphics]::FromImage($Bitmap)

        # Capture screen
        $Graphic.CopyFromScreen($Left, $Top, 0, 0, $Bitmap.Size)

        # Save to file
        $Bitmap.Save($FullName, $Imageformat)
        Write-Verbose -Message "[$(get-date -Format T)] Screenshot saved to $FullName"
        if ($Beep)
        {
            [console]::beep()
        }
        
        if (($DurationInSeconds -gt 0) -and ($IntervalInSeconds -gt 0))
        {
            Write-Verbose "[$(get-date -Format T)] Sleeping $IntervalInSeconds seconds ..."
            Start-Sleep -Seconds $IntervalInSeconds
            $TimeElapsed += $IntervalInSeconds
        }
        if ($IsTimeStampedFileName)
        {
            $FullName = Join-Path -Path $Directory -ChildPath $((get-date -f yyyyMMddTHHmmss)+".$Format")
        }
    } While ($TimeElapsed -lt $DurationInSeconds)
}    
#endregion

Clear-Host
New-Alias -Name New-ScreenShoot -Value Get-ScreenShot -ErrorAction SilentlyContinue
#Get-ScreenShot -Verbose
Get-ScreenShot -Directory 'C:\Users\gianluca.hoffmann' -Format jpg -DurationInSeconds 500 -IntervalInSeconds 50 -Area WorkingArea -Beep -Verbose
#Get-ScreenShot -FullName 'C:\Users\gianluca.hoffmann\screenshot.wmf' -Verbose

split string to array

$
0
0

Hello!

I have a string that I want to split in an array

string: "(text1)(text2)(text3)"

I want to get an array with the 3 textfields inside the "()"

How can I do this?

I have tried with regex.

$r = [regex] "\([^\(\)]+\)"
$match = $r.match($MyString)

But I only get the text in first Brackets

rg

Hansi

Arrayposition mit foreach nochmal wiederholen

$
0
0
Hallo zusammen :)

Ich möchte den Inhalt eines Arrays nochmal wiederholen lassen, wärend es durchläuft.
Kann ich dies irgendwie beeinflussen, dass der Zeiger der Arrayposition nochmal den gleichen Inhalt bearbeitet?

Im Verlauf der foreach-Schleife kommt eine Abfrage in einer MessageBox.
Wenn ich dort auf "Wiederholen" klicke, soll der Inhalt nochmal bearbeitet werden.

Danke & viele Grüße

Andreas

Get-ADUser MemberOf vergleichen, Verständnisfrage

$
0
0

hallo zusammen

mit -Properties MemberOf erhalte ich alle Gruppen einer Person. (Vermutlich ein Array) Geschwungenen Klammern

ist es möglich das Array "memberof" mit einem String zu vergleichen?

bei $ADUser. wird MemberOf gar nicht angeboten.

$ADUsers = Get-ADUser -SearchBase "dc=company,dc=com" -Filter * -Properties memberOf

foreach($ADUser in $ADUsers){
$ADUser
    if($ADUser.memberof -contains "Suchbegriff"){
         write-host "richtig" -ForegroundColor Yellow
    }


}


Chris


Letzten größten uidNumber-Wert finden

$
0
0

Hallo,

ich benötige eine Powershell-Lösung, um den letzten größten uidNumber-Wert anzuzeigen (UNIX-Attribut). Habe zwar eins erstellt, aber als Ausgabe wurde die 1 ausgegeben. Das kann nicht sein.

Ist mir evtl. im Skript ein Fehler unterlaufen?

Import-Module ActiveDirectory

$nis = Get-ADObject -Identity "OU=Test-OU2,OU=Test-OU1,DC=Test-Domain,DC=com" -Properties msSFU30MaxUidNumber

$max_uid = $nis.msSFU30MaxUidNumber
echo $max_uid
Viewing all 2314 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>