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

Dynamische Checkbox(en) erzeugen

$
0
0

Hallo,

ich möchte Checkboxen dynamisch generieren.

Habe ein paar Beispiele gefunden und getestet. Die folgende Lösung gefällt mir eigentlich ganz

gut und damit könnte ich arbeiten:

functionGenerateForm{
    param([string[]]$CheckBoxLabels)# Rest of code goes here ...}

# Keep track of number of checkboxes $CheckBoxCounter =1# When we create a new textbox, we add it to an array for easy reference later $CheckBoxes = foreach($Label in $CheckBoxLabels){ $CheckBox =New-ObjectSystem.Windows.Forms.CheckBox $CheckBox.UseVisualStyleBackColor= $True $System_Drawing_Size =New-ObjectSystem.Drawing.Size $System_Drawing_Size.Width=104 $System_Drawing_Size.Height=24 $CheckBox.Size= $System_Drawing_Size $CheckBox.TabIndex=2# Assign text based on the input $CheckBox.Text= $Label $System_Drawing_Point =New-ObjectSystem.Drawing.Point $System_Drawing_Point.X =27# Make sure to vertically space them dynamically, counter comes in handy $System_Drawing_Point.Y =13+(($CheckBoxCounter -1)*31) $CheckBox.Location= $System_Drawing_Point $CheckBox.DataBindings.DefaultDataSourceUpdateMode=0# Give it a unique name based on our counter $CheckBox.Name="CheckBox$CheckBoxCounter"# Add it to the form $form1.Controls.Add($CheckBox)# return object ref to array $CheckBox# increment our counter $CheckBoxCounter++}

$handler_button1_Click={
    $listBox1.Items.Clear();# Keep track of whether something has been added to the list
    $ContentPresent = $false# Iterate over the checkboxes, one by one
    foreach($CheckBox in $CheckBoxes){if($CheckBox.Checked){
            $listBox1.Items.Add("{0} (with value ""{1}"") has been checked"-f ($CheckBox.Name,$CheckBox.Text))
            $ContentPresent = $True}}# If something was already added to the list, no need to show default messageif(-not $ContentPresent){ $listBox1.Items.Add("No CheckBox selected....")}

Ich habe das Ganze auf meine Bedürfnisse angepasst und bin soweit zufrieden damit.

Allerdings verstehe ich irgendwie das "Button click handling" hier nicht. In dem Beispiel hier werden die Ergebnisse

der gecheckten Checkboxen an "$listBox1" übergeben. Wenn ich hier in der foreach-Schleife $Checkbox abfrage, erhalte

ich den CheckState der eben auf 0 oder 1 gesetzt ist. Wie kann ich hier die Werte für CheckBoxLabels wieder abfragen,

die ich mit GenerateForm -CheckBoxLabels Hund,Katze,Maus übergeben habe, um diese wieder in einer Variable zu

speichern und um zu wissen, was nun letztendlich ausgewählt wurde? In dem Beispiel geschieht das wohl über

Items.Add. Statt der foreach-Schleife wäre mir eine Abfrage wie if (Checkbox1.checked) lieber. Habe aber leider gerade

so keine Idee, wie ich es lösen kann. Wäre jemand bitte so nett, mich da mal gerade mit Ideen, Tipps und Vorschlägen

zu unterstützen? Bin auch für komplett andere Ansätze offen, wie man dynamische Checkboxen erstellen kann.

Das hier aufgeführte Beispiel war für mich bisher nur weitestgehens am verständlichsten.

Vielen Dank.

Gruß

Christian



Get-AdComputer, accountexpires als Datum anzeigen lassen

$
0
0

wie kann ich mir das Datum von accountexpires bei Get-ADComputer anzeigen lassen.

das habe ich im Internet gefunden

$a = Get-ADComputer test -Properties * 
[datetime]::FromFileTime($a)

Das Argument "fileTime" mit dem Wert  "CN=test,DC=firma,DC=de" für "FromFileTime" kann nicht in den Typ "System.Int64"
konvertiert werden: "Der Wert "CN=test,DC=firma,DC=de" vom Typ "Microsoft.ActiveDirectory.Management.ADComputer" kann
nicht in den Typ "System.Int64" konvertiert werden."
In Zeile:2 Zeichen:1
+ [datetime]::FromFileTime($a)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

((Get-ADComputer test -Properties accountexpires).accountexpires).gettype()
IsPublic IsSerial Name                                     BaseType                                                                                                                          
-------- -------- ----                                     --------                                                                                                                          
True     True     Int64                                    System.ValueType    




Chris

Ordnerstruktur auf Sharepoint Bibliothek per Powershell Script aus Vorlagen erstellen

$
0
0

Guten Abend zusammen,

leider habe ich bisher keine eindeutige Antwort auf meine Frage erkannt, daher schreibe ich nun selbst. Ich hoffe, jemand kann mir hier helfen.

Wir haben im Büro bislang auf einer örtlichen WD Mycloud Angebote etc. gespeichert. Per Powershell Script konnte man Projekte in einem bestimmten Kundenordner auf der Mycloud speichern. Man hat den Projektnamen eingegeben und seine Initialen und schon wurde alles angelegt. Wir satteln nun auf den Sharepoint um und hier habe ich bereits versucht, per Powershell das Script umzuschreiben.

Ich bin permanent auf officeonline.com angemeldet - Seiten sind als vertrauenswürdig eingestuft. Ebenso habe ich die Bibliothek "Verkauf" als Netzlaufwerk "Z" verbunden. Manuell speichern über den Explorer geht. Allerdings wirft mir Powershell den Fehler "Es wurde kein Positionsparameter gefunden, der das Argument "..." akzeptiert. Ebenso sagt mir Powershell, dass das Laufwerk "Z" nicht existiere - aber ich kann aus dem Explorer heraus dort speichern.

Hier mal der ganze Code:

$foldername = Read-Host "Bitte gib einen Projektnamen ein"
$foldername_kuerzel = Read-Host "Bitte gib dein Kürzel ein"

New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Angebote -type Directory
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Auftrag -type Directory
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Rechnung -type Directory
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation -type Directory
Get-Childitem "C:\Users\PMMue\OneDrive\Desktop\Script\Kalkulationsvorlage.xlsm" -recurse | Copy-Item -Destination "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\"
Rename-Item  "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\Kalkulationsvorlage.xlsm" -Newname "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\$foldername-kalkulation.xlsm"
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung -type Directory
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Fotos -type Directory
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Einkauf -type Directory
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Partner -type Directory
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog -type Directory
Get-Childitem "C:\Users\PMMue\OneDrive\Desktop\Script\vorlage_eventlog.docx" -recurse | Copy-Item -Destination "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\"
Rename-Item "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\vorlage_eventlog.docx" -NewName "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\$foldername-eventlog.docx"
New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Sonstiges -type Directory
start Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\

Kann mir jemand einen Tipp geben, was ich ändern muss?

Viele Grüße

Philipp


Visual Studio Projektmappenkonfiguration abfragen?

$
0
0

Hallo,

kann man mit der Powershell die eingestellte Visual Studio Projektmappenkonfiguration abfragen? Im einfachsten Fall wäre das ja Relase und Debug.

Viele Grüsse,

Roger


Security Gruppe zu Drucker hinzufügen, Everyone entfernen

$
0
0

moin,

hat zufällig schon jemand einmal mit Druckerberechtigungn experimentiert?

gibt es eine einfachere Möglichkeit einem Drucker eine Security Gruppe hinzuzufügen und ggf. Everyone zu entfernen? Das mit der PermissionSDDL ist sehr undurchschaubar.

$a = get-Printer "drucker" -FULL -ComputerName "ntspr" | where devicetype -eq "Print"
($a).PermissionSDDL

$x = "G:SYD:(A;;LCSWSDRCWDWO;;;BA)(A;OIIO;RPWPSDRCWDWO;;;BA)(A;CIIO;RC;;;CO)(A;OIIO;RPWPSDRCWDWO;;;CO)(A;;SWRC;;;WD)(A;CIIO;RC;;;WD)(A;OIIO;RPWPSDRCWDWO;;;WD)(A;;SWRC;;;S-1-5-21-868834276-138477949-109707333-10480)(A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-868834276-138477949-109707333-1080)(A;;LCSWSDRCWDWO;;;S-1-5-21-868834276-138477949-109707333-1080)"

Set-Printer 'drucker' -ComputerName "Printserver" -PermissionSDDL $x


Chris

SQL Abfrage in ComboBox füllen

$
0
0

Hi

Ich versuche mit Powershell ein GUI mit mehreren ComboBox und TextBox zu machen. Befüllt werden sollen sie aus einem Resultat einer SQL Abfrage ($sqlReturn). Darin sind alle Daten enthalten, die ich für die GUI benötige. Nur halt separat gefiltert, je nach Auswahl in einer ComboBox ..

Hier ein Auszug der Abfrage, wenn ich $sqlReturn direkt auf der Konsole ausgebe:

zNummer   zUser                 zANummer        zNachname             
--------- --------------------- ----------      ---------             
I19_045   (nicht zugewiesen)    XY 2019 212     Müller                 
I14_014   (nicht zugewiesen)                    Testeintrag           
I19_065   kurz1                 XY 2019 1172    Meier              
I19_050   kurz1                 XY 2019 1177    Marfurt                
I19_048   kurz3                 XY 2019 467     Müller
I19_048   kurz3                 XY 2019 467     Peter 

Die erste ComboBox enthält alle Namen (zUser), die in $sqlReturn vorkommen. Das klappt soweit ..

# Aus einem INI File wird der default User ausgelesen
$inifile = Get-IniContent "$PSScriptRoot\include\meinFile.ini"
$USR = $inifile["User"]["user"]

$sqlReturn = Get-SQLData $srv1 $srv2 $srv3 $srv4 $sqlString

# erste ComboBox mit User
$DropDownArray0 = $sqlReturn.zUser | Get-Unique

#  Ab hier beginnt dann die GUI
#  Nur ein Auszug von der ersten ComboBox

  $objComboBox0.Items.AddRange($DropDownArray0)
  $objForm.Controls.Add($objComboBox0)
  # ComboBox Zeiger auf default User legen
  $objComboBox0.Text = $USR

Die zweite ComboBox soll nun, abhängig vom ausgewählten User in der ersten ComboBox, die in der SQL Abfrage vorhandenen Nummern (zNummer) ausgeben.

Wenn in der ersten ComboBox also 'kurz1' ausgewählt wurde, soll in der zweiten ComboBox 'i19_050' und 'I19_065' zur Auswahl stehen.

Ohne jetzt bereits schon auf den dynamischen Wechsel der Anzeige von ComboBox 2, in Abhängigkeit zu ComboBox 1 einzugehen, wollte ich erst einmal nur die gefilterten Daten für die zweite ComboBox aufbereiten. Allerdings scheitere ich an der Filterung...

Hier mal einer meiner Versuche an ein Ergebnis zu kommen ..

# auch hier nur ein Auszug aus der GUI ..
#  nach Einträgen für erste ComboBox ..

 # gib den augewählten zUser  der ersten ComboBox zurück
  $UserName = $objComboBox0.SelectedItem

# jetzt das Aufbereiten der SQL Abfrage für die zweite ComboBox
  ForEach($row1 in $script:sqlReturn) {
    $dda1 = $row1.zUser
    If ($dda1 -contains $UserName) {
      $DropDownArray1 = $row1.zNummer
    }
  }

  # nur einmalige zNummern zur Auswahl geben
  $DropDownArray1 = $DropDownArray1 | Get-Unique
    
  # zNummern des Users in ComboBox abfüllen
  $objComboBox1.Items.AddRange($DropDownArray1)
  
  $objForm.Controls.Add($objComboBox1)

Wie bereits erwähnt, das liefert leider alle zNummern aus der SQL Abfrage zurück, ohne zusätzlicher Datenreduktion auf die Datensätze von UserName ..

Vielleicht hat mir ja jemand einen Tipp dazu. Vielleicht auch gleich einen Hinweis darauf, wie ich die Abhängigkeit der ComboBoxen wärend der Laufzeit der GUI hinbekomme?



Terminals, Clientname, ThinClient

$
0
0

moin,

wir benötigen die echten Clientnamen wenn man sich von einem WYSE Terminal auf einen Windows Termins Server verbindet.

leider liefert die Variable CLIENTNAME nicht den korrekten Namen.


$client = $env:CLIENTNAME
hat jemand eine einfacherer Lösung in Powershell dafü. Vielleicht gibt es doch diese Variable.

unter DOS hatten wir es so gelöst. Zur Not muss ich sonst das nachbauen

for /f "tokens=1-3" %%1 in ('query session %USERNAME% ^| find ">"') do set ses_num=%%3
for /f "tokens=1-3" %%1 in ('reg query "HKCU\Volatile Environment\%ses_num%" /v CLIENTNAME') do set client_name=%%3

echo %TIME%    %USERNAME%    on %COMPUTERNAME%        from %client_name%>> \\server\share\Lizenz\%USERNAME%.txt


Chris


Compress-Archive + QuellDateien löschen

$
0
0

Hallo,

ich würde gern per PowerShell alle Unterverzeichnisse eines definierten Ordners archivieren. Also so zippen, dass die OrginalDateien und Verzeichnisse nur noch im Archiv vorhanden sind. Kennt jemand einen Schalter für "move". Bei winzip war das -m.

Das zippen funktioniert mit:

$qVerz = "C:\PS\Test\*"
$zVerz = "C:\PS\Archiv\"
Get-ChildItem $qVerz -Directory | %{ Compress-Archive -Path "$($_.Fullname)\*" -DestinationPath "$zVerz$($_.Name)$(get-date -Format _yyyyMMdd).zip" -update}

mit folgendem Befehl könnte ich die ausgewählten Verzeichnisse im Nachgang löschen:

Get-ChildItem $qVerz -Directory | Remove-Item -Force -Recurse

Dabei sehe ich aber das Problem, dass während des Zippens neue Dateien in die Ordner eingefügt werden können die dann beim Renove-Item mit gelöscht werden würden ohne im Archiv zu sein. Das Zippen selbst könnte ja auch auf einen Fehler laufen.....

Gibt es einen Schalter für "move"?

Wenn nicht, gibt es eine Möglichkeit zu fragen ob definierte Dateien im Archiv vorhanden sind? Also erste eine Liste aller Dateien erstellen ...

Get-ChildItem $qVerz -Recurse

... und dann nur die löschen, die im Archiv vorhanden sind.

Danke.

Gruß.

ottto1


Powershell, LastIndexOf

$
0
0

moin

ich möchte von rechts den Wert der dritten OU herauslesen

"U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"

$b = $a.LastIndexOf("OU=", $a.LastIndexOf("OU=")-1)


geht leider nur zum zweiten


Chris

Powershell Datagridview aus Datasource mit mehreren Textboxspalten und einer Comboboxspalte

$
0
0

Hallo zusammen.

Ich versuche derzeit vergeblich, in einer Tabelle zu erzeugen, in der eine Spalte eine Combobox mit unterschiedlichen Werten je Spalte sein soll.

Vereinfachtes Beispiel:

CSV Datei

Dateiname;Unterlage;Blatt;Planbreite;Planhöhe;Maßstab;Schichten
A2_Übersichtskarte.plt;2;;42;29,7;1:25000;0011_Asphalttragschicht,0015_Kies/Schotterschicht(14),0002_Gelände im Planungsber.(24)
A3_B1_Lageplan.plt;3;1;116;70;1:250;0002_Gelände im Planungsber.(12),0026_Natursteinbruch(16),0023_Stein(4)
A3_B2_Lageplan VE.plt;3;2;116;70;1:250;0054_Brücke(7),0024_Betonsockel für Stein(11),Gradiente_GRAD_1_Gradientenlinie_1+
A4_B1_HP_Achse-100.plt;4;1;59;40;1:250;0001_Gelände(1),Kataster,Stempel
A4_B2_HP_Achse-101.plt;4;2;78;59,4;1:250;0003_Deckenbuch(5),0214_Baugrube(5),0013_Schottertragschicht(4)
A4_B3_HP_Achse-102.plt;4;3;59;40;1:250;Bezugshöhe(16),PLANAUSSTATTUNG,0005_Oberboden - Auftrag(13)

Powershell Script:

Add-Type -AssemblyName System.Windows.Forms

$Fenster=New-Object System.Windows.Forms.Form -Property @{WindowState='Maximized';Padding='30,30,30,30'}
$Tabelle=New-Object System.Windows.Forms.Datagridview -Property @{Dock='Fill';EditMode='EditOnEnter';RowHeadersVisible=$False;AllowUserToResizeRows=$False}
[System.Collections.Arraylist]$CSV=Import-Csv -Delimiter ';' -Encoding Default test.csv | % {$_.Schichten=$_.Schichten.Split(',');$_} 

$Fenster.Controls.Add($Tabelle)
$Tabelle.DataSource=$CSV
$Fenster.ShowDialog()

Statt der TextboxSpalte 'Schichten' soll hier eine Comboxspalte mit den entsprechenden Werten.

Ich habe auch bereits versucht, die ComboBoxSpalte nachträglich zur Tabelle hinzuzufügen füllen zu lassen:

Add-Type -AssemblyName System.Windows.Forms

$Fenster=New-Object System.Windows.Forms.Form -Property @{WindowState='Maximized';Padding='30,30,30,30'}
$Tabelle=New-Object System.Windows.Forms.Datagridview -Property @{Dock='Fill';EditMode='EditOnEnter';RowHeadersVisible=$False;AllowUserToResizeRows=$False}
[System.Collections.Arraylist]$CSV=Import-Csv -Delimiter ';' -Encoding Default test.csv | % {$_.Schichten=$_.Schichten.Split(',');$_} 

$Fenster.Controls.Add($Tabelle)
$Tabelle.DataSource=$CSV
$Tabelle.Columns[6].Visible=$False
$ComboColumn=New-Object System.Windows.Forms.DatagridviewComboBoxColumn -property @{Headertext='Schichten';width=200}

$Index=$Tabelle.Columns.Add($ComboColumn)
$Tabelle.Rows | % {$i=0} {
	$_.Cells[$Index]=New-Object System.Windows.Forms.DatagridviewComboBoxCell -property @{items=$CSV[$i].Schichten}
	$i++
	}

$Fenster.ShowDialog()

Zwar wird so die Comboboxspalte erstellt, jedoch sind die angezeigten Comboboxen leer, obwohl die Items richtig zugewiesen wurden, wenn man den Zellinhalt abruft.

Darüber hinaus wird der Spaltentyp beim schließen des Fensters automatisch in "DataGridViewTexboxColumn" geändert.

Hat jemand einen Lösungsvorschlag?

Gruß Thomas

Mechanismus, damit sich Visual Studio die eingestellte Projektmappenkonfiguration merkt

$
0
0

Hallo.

welcher Mechanismus sorgt dafür, dass eine im Visual Studio eingestellte Projektmappenkonfiguration (es können ja einige unterschiedliche vorliegen) nach Schliessen des Visual Studio und wieder Öffnen des Visual Studios dann wieder korrekt angwählt wird? Oder nach Entladen und Wiederladen einer Solution/Projektmappe, nachdem zuvor eine andere Solution/Projektmappe angewählt wurde. Also so wie die Konfiguration vor dem Schiessen/Entladen gesetzt war. Wird das in einer Datei gespeichert? Oder in der Registry? Oder in einer Datenbank? Beiispiele für Projektmappenkonfiguration: im einfachsten Fall Debug, Release

Viele Grüsse, Roger

Powershell vs. Powershell ise

$
0
0

Wie arbeitet die powershell ise anders als die normale Powershell?

Hintergrund meiner Frage ist das ich ein Skript geschrieben habe, welches in der PS ise ohne Probleme läuft aber in der PS Fehler wirft. Die Fehler scheinen irgendwie mit Variablen die ich definiert habe zu tun zu haben.

Kann mir hier jemand helfen?

Softraid auslesen

$
0
0

Hallo,

Ich habe ein paar PC's mit einem Softraid am laufen (Raid1).

Zur kleinen Absicherung während des Betriebes wollte ich beim Start ein Scipt laufen lassen, dass den Raid-Status ausgibt und bei Fehler eine Hinweismeldung bringt. Hoffnungsvoll habe ich etwas mit Get-Volume zusammengehackt und den HealthStatus ausgewertet.

Überraschenderweise hat der Real-Test ergeben, dass obwohl eine Festplatte fehlt, der Status als "Healthy" deklariert wird. Gibt es eine andere Lösung?

MfG

Christian

PS: "echo list volume | diskpart" ist keine Lösung, da die Benutzer nur User-Rechte haben

try / catch

$
0
0

Hallo zusammen,

ich möchte per try und catch Fehler in meinem Programm abfangen. Dazu mein Beispiel:

 
$quelle = 'C:\Ablage\PS'
#$quelle = 'XXXC:\Ablage\PS'
#$quelle = 'C:\Ablage\PSXXX'

try {
    Get-ChildItem "$($quelle)\*" -Directory
}

catch {
    write-host "Fehler abgefangen: $_" 
}

finally {
    write-host "ENDE!!!"
}


Bei der ersten Variante, mit einem Pfad der wirklich existiert ($quelle = 'C:\Ablage\PS'), läuft das Programm ohne Fehler durch.

Bei der zweiten, mit einem Pfad der nicht existiert ($quelle = 'XXXC:\Ablage\PS'), kommt die Fehlermeldung aus dem catch-Zweig, wie erwartet. Der Pfad in der dritten Variante ($quelle = 'C:\Ablage\PSXXX') existiert auch nicht. Der Ausgabebefehl"write-host "Fehler abgefangen: $_", aus dem catch-Zweig, wird aber nicht angesprochen. Ich hätte an der Stelle auch die entsprechende Fehlermeldung erwartet. Hat jemand dazu einen Hinweis für mich?

 Danke.

 Gruß.

 ottto

Wie kann ich ein Linkclicked Event eines Linklabels aufrufen ohne es anzuklicken?

$
0
0

Ich verwende die Windows Forms in powershell und habe da ein LinkLabel.
zu diesem Link habe ich ein Event hinzugefügt:
$linkLabel.add_LinkClicked($handler_linkLabel_LinkClicked)

Was getan werden soll wird dann ja so geschrieben:
$handler_linkLabel_LinkClicked=
{
       # Tue etwas
}

Das funktioniert bei mir auch soweit.

Meine Frage ist jetzt, ob es möglich ist dieses Event vom Script aus auszuführen. (nicht draufklicken, sondern mit einem Befehl auslösen)


Lösch Skript mit der Möglichkeit ganze Ordner zu exkludieren

$
0
0

Hallo an Alle,

ich hoffe ihr könnt mir helfen. Ich bin gerade daran mit Hilfe von Powershell Dateien zu löschen welche älter sind als X Tage. Das funktioniert auch alles wunderbar. Jetzt habe ich aber das Problem, dass ich gewisse Ordner exkludieren möchte. Das funktioniert aber leider nicht so wie ich möchte. Daher teile ich jetzt mal mit was ich bereits habe und hoffe das ihr mir helfen könnt.

Ordner Struktur sieht Beispielhaft so aus:

Mein Löschskript für die Dateien wo älter sind als X Tage sieht so aus:

Quelle = "C:\Abteilungen\"
$Days = 10
$ext = "*.txt","*.log"
$log = "$Source$(get-date -format yymmddHHmmss).txt
$DateBeforeXDays = (Get-Date).AddDays(-$Days)

Start-Transcript $log
get-childitem $Source\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays -and -not $_.psiscontainer} | % {remove-item $_.fullname -force -verbose -whatIf}
Stop-Transcript

Das Löschen der Dateien die älter sind als in dem Fall 10 Tage funktioniert prima nur leider möchte jetzt der Chef der Abteilung1 nicht das das bei ihm passiert und die Mitarbeiter bei Abteilung3 möchten es auch nicht.

Wie kann ich also eine Auswahl mit einfließen lassen bzw diese Ordner oder sogar Unterordner exkludieren ?

Für eure Hilfe wäre ich sehr dankbar.

  

Zeilen zählen bis wert erreicht wurde.

$
0
0

Hallo,

ich suche eine möglichkeit über Powershell eine Textdatei einzulesen und darin von zeile 1 bis Wert = "END" den inhalt zu löschen. Der restliche Inhalt soll dabei bestehen bleiben. Den Wert "End" gibt es nur einmal und steht jedesmal in einer anderen zeile.

Gruß

Dalma


Aktualisieren von mehreren Excel-Arbeitsblätter in eine einzigen Excel-Datei mit den entsprechenden CSV-Dateien

$
0
0

Hallo

 

ich habe einen Excel-File mit verschiedenen Arbeitsblätter, deren Inhalt mit einem einzigen Makro regelmäßig aktualisiert wird.

Der Benutzer muss nacheinander jedes Arbeitsblatt anklicken und das Makro auszuführen. Das Makro fragt bei jedem Arbeitsblatt nach der entsprechenden CSV-Datei, das manuell ausgewählt werden muss. Die Auswahl der CSV-Datei muss

 bei jedem Arbeitsblatt bestätigt werden.

 

Ich will folgendes machen:

- den Namen der Arbeitsblätter aus einem csv-file auslesen

- Arbeitsblatt mit dem Namen "Firma1" aktivieren bzw. auswählen -> Macro starten -> Makro fragt nach Datei mit dem Namen "Firma1.csv" -> Macro meldet anschließend Arbeitsblatt mit dem Namen "Firma1" wurde aktualisiert.

- Arbeitsblatt mit dem Namen "Firma2" aktivieren bzw. auswählen -> Macro starten -> Makro fragt nach Datei mit dem Namen "Firma2.csv" -> Macro meldet anschließend Arbeitsblatt mit dem Namen "Firma2" wurde aktualisiert.

- Arbeitsblatt mit dem Namen "Firma3" aktivieren bzw. auswählen -> Macro starten -> Makro fragt nach Datei mit dem Namen "Firma3.csv" -> Macro meldet anschließend Arbeitsblatt mit dem Namen "Firma3" wurde aktualisiert.. Etc ...

 

## Abfrage welche Datei ausgewählt wird

## ideal wäre Wenn

# worksheetname company1 = buchhaltung-company1.csv

# worksheetname company2 = buchhaltung-company2.csv

# worksheetname company3 = buchhaltung-company3.csv

 

# dann Makro ausführen

Wäre toll wenn ich hier Unterstützung bekäme ;-)

Danke

Mein Skript-Entwurf

   # Open Excel file

   $excel = new-object -comobject excel.application

   $filePath = "u:\Test_CompanyAccouting.xlsm"

   $workbook = $excel.Workbooks.Open($FilePath)

   $excel.Visible = $true

   # Get Names of existing Worksheets

 

   $worksheets = Get-ChildItem -Path u:\List_WorksheetsNames.csv | ForEach-Object {$_.name}

   forEach ($Worksheet in $Worksheets)

{

   $WS = $Workbook.Worksheets.Item($Worksheet)

   $WS.Activate()

   $excel.Run("MacroAccounting")

}

   $workbook.save()

   $workbook.close()

   $excel.quit()

   Write-Host "Closed Excel"

group aus teilstring, select substring

$
0
0

moin,

kann man einen Teilstring gruppieren?

Get-ADGroupMember "Schulung" | select distinguishedName

ich benötigt als  Ergebnis aus dem unten angeführten Beispiel nur die zwei Ergebnisse der ersten OU

0101

0102

diese werden dann weiterverarbeitet und dürfen nicht doppelt vorkommen.

selbst mit einer foreach komme ich leider nicht weiter

$test = Get-ADGroupMember "Schulung" 

foreach ($OU in $test){

    $OU = $ou.DistinguishedName.Split(',')[1] -replace('OU=')
    $OUShort = $OU.Substring(0,5)
    $ougroup += $OUShort

}
$ougroup | group

Ergebnis sieht eher wie ein String aus


Count Name                      Group                                                                                                                                                        
----- ----                      -----                                                                                                                                                        
    1 0101 0101 0101 0101 01... {0101 0101 0101 0101 0102 0102 0101 0101 0101 0101 0101 0101 0101 0101 }                                                                                     


PS H:\> Get-ADGroupMember "Schulung" | select distinguishedName

distinguishedName                                                         
-----------------                                                         
CN=501,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=511,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=510,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=509,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=508,OU=0102 - Schulungraum2,OU=office,DC=firma,dc=de  
CN=507,OU=0102 - Schulungraum2,OU=office,DC=firma,dc=de  
CN=506,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=505,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=504,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=503,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de
CN=502,OU=0101 - SchulungsraumEG,OU=office,DC=firma,dc=de


Chris



Powershell span altes Datum / neues Datum vom VBA => Powershell

$
0
0

Hallo

Bitte

Ich möchte den VBA script als Powershell benützen. Zeit/Datum span. Den Script benütze ich für Excel/Frankreich.

decal=255675  
=DATEDIF(h3+decal;h5+decal;"y")&"Ann., "&DATEDIF(h3+decal;h5+decal;"ym")&"Mo., "  &DATEDIF(h3+decal;h5+decal;"md")&"Jrs."

Function NewDateDif(dat1As Date, dat2 As Date) As String  
$oldD = @(  Dim ans%, mois%, jours%  
ans = Year(dat2) -Year(dat1) + (DateSerial(2000, Month(dat2), Day(dat2)) < DateSerial(2000,Month(dat1), Day(dat1))) 
mois = Month(dat2) -Month(dat1) + (Day(dat2) < Day(dat1))  
If mois < 0 Then mois= mois + 12  
jours = dat2 -DateSerial(Year(dat2), Month(dat2), Day(dat1))  
If jours < 0 Thenjours = dat2 - DateSerial(Year(dat2), Month(dat2) - 1, Day(dat1))  
NewDateDif = IIf(ans,ans & " an" & IIf(ans > 1, "s", ""),"") & " " & _  
IIf(mois, mois & " mois","") & " " & IIf(jours, jours & "jour" & IIf(jours > 1, "s", ""),"")  
NewDateDif =Application.Trim(NewDateDif) 'SUPPRESPACE  
End Function

Was macht der Script?

End Date : 31/08/1939

27/02/1902
31/03/1912
23/07/1896

Das Resultat ist:

37 ans 6 mois 4 jours
27 ans 5 mois
43 ans 1 mois 8 jours

Oder: Datum 1 <=> Datum 2 (for eatch)

27/02/1902  10/03/1960
31/03/1912  11/09/2000
23/07/1896  19/11/1958

Resultat

58 ans 12 jours
88 ans 5 mois 11 jours
62 ans 3 mois 27 jours

Danke für Ihre Hilfe

@r

Viewing all 2314 articles
Browse latest View live
<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>