Blobs auf der Festplatte speichern
Hier ein Beispiel, wie man Blobs auf die Festplatte extrahieren kann:
Textsatz mit \LaTeX, Programmieren, Zahlen, etc.
Archive for the ‘Programmierung’ Category.
Hier ein Beispiel, wie man Blobs auf die Festplatte extrahieren kann:
Interessante Powershell-Codeschnipsel findet man unter http://www.msxfaq.de/code/powershell.htm
Gegeben seien n Ordner, in denen jeweils eine Datei mit festgelegtem Namen liegt. Folgendes Skript extrahiert den Inhalt der Datei und gibt ihn zusammen mit dem Pfad aus.
Clear-Host Clear-History cd d:\ $folders = gci | ? {$_.PSisContainer -eq $true} foreach ($folder in $folders){ if ((Test-Path -path $folder\template.txt)){ "" + $folder + ", " + (Get-Content $folder\template.txt) } else { "No template.txt in " + $folder } } |
Hier ein kurzer Code-Schnipsel, um Kopier-Quelle und Ziel aus einer CSV-Datei zu entnehmen.
$folders = Import-Csv u:\datei.txt foreach ($folder in $folders){ Copy-Item -force -Recurse ("C:\quelle\" + $folder.oldpath) -destination ("C:\ziel\" + $folder.newpath) } |
In der ersten Zeile der datei.txt muss „oldpath,newpath“ stehen, in den Zeilen darunter die komma-separierten Pfade.
Hier die Folien vom Arduino-Workshop auf der Froscon.
Eric Wroolie zeigt in seinem Blogeintrag unter , wie man per Powershell den Onlinestatus setzt (Hinweis: Das Skype COM Add-In muss wohl nicht extra registriert werden, Skype installiert es schon mit). Seine Lösung funktioniert auch sehr gut, aus Interesse und praktischem Anlass wollte ich aber eine kleine Exe haben, die das Setzen des Status übernimmt. Folgender C# Code macht schon genau das, was er soll, Exception-Handling etc. fehlt aber noch.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using SKYPE4COMLib; namespace COM_Testapplication { class Program { public static Skype skype = new Skype(); static void Main(string[] args) { User currentUser = skype.get_User(); skype.ChangeUserStatus(skype.Convert.TextToUserStatus("ONLINE")); } } } |
Ich habe in meiner Dateiablage ein bestimmtes Namensschema, nach dem nur bestimmte Ordnernamen für Unterordner zulässig sind und außerhalb dieser Unterordner keine Dateien liegen sollen. Die folgenden Skripte helfen dabei, Abweichungen vom Schema zu finden.
Skript No. 1 sucht sich alle Ordner in der Struktur und prüft dann für jeden Ordner, ob er entweder „allowedfoldername1“ oder „allowedfoldername2“ heißt. Abweichungen davon werden mit ihrem kompletten Pfad ausgegeben.
cd "d:\Structure" $folders = gci | ? {$_.PSisContainer -eq $true} foreach ($i in $folders){ cd $path cd $i $subfolders = gci | ? {$_.PSisContainer -eq $true} foreach ($j in $subfolders){ if ($j.name -ne "allowedfoldername1" -and $j.name -ne "allowedfoldername2"){ $j.fullname } } } |
Zusätzlich möchte ich prüfen, ob auch in jedem Ordner die beiden Unterordner „allowedfoldername1“ und „allowedfoldername2“ vorhanden sind. Dies geschieht in folgendem Skript mittels testpath
, die Ergebnisse werden in einer CSV-Datei gespeichert.
cd "d:\structure" $folders = gci | ? {$_.PSisContainer -eq $true} foreach ($i in $folders){ cd $path cd $i if (!(Test-Path -path 'allowedfoldername1')){ "allowedfoldername1 does not exist in `t$i" | Out-File "c:\structures-20110721.csv" -Append -Width 270 } if (!(Test-Path -path 'allowedfoldername2')){ "allowedfoldername2 does not exist in `t$i" | Out-File "c:\structures-20110721.csv" -Append -Width 270 } } |
Ordnernamen, die nicht richtig benannt wurden, können auch einfach umbenannt werden:
Clear-History Clear-Host cd "c:\somefolder" $subfolderold='oldname' $subfoldernew='newname' $folders = gci | ? {$_.PSisContainer -eq $true} foreach ($i in $folders){ cd $path\$i if ((Test-Path -path $subfolderold)){ rename-item -path $subfolderold -newname $subfoldernew } } |
Final kann noch geprüft werden, ob es Dateien gibt, die nicht in einem der beiden Unterordner, sondern im jeweiligen Ordner selbst liegen.
Clear-History Clear-Host cd "d:\structure" $folders = gci foreach ($fund in $folders){ gci $fund | ? {$_.PSisContainer -eq $false} | Select Fullname | Out-File "c:\lonely-fund-files-20110721" -Append -Width 280 } |
Vor kurzem musste ich Pfadangaben in Excel auf Zeichen prüfen, die nicht der Vorgabe (Buchstaben, Ziffern, Leer- und Unterstrich) entsprechen. Folgende VBA Funktion war recht schnell geschrieben und läuft auch recht performant.
Function ContainsBadChar(source As String) As String Dim char As String For i = 1 To Len(source) char = Mid(source, i, 1) If ((Asc(char) > 64 And Asc(char) < 91) Or (Asc(char) > 96 And Asc(char) < 123) Or (Asc(char) > 47 And Asc(char) < 58) Or (Asc(char) = 95) Or (Asc(char) = 45)) Then ContainsBadChar = "0" Else ContainsBadChar = "1" Exit For End If Next End Function |
In den letzten Tagen hatte ich die Notwendigkeit, eine Liste von Benutzern und ihren Gruppen zu erstellen. Folgendes Powershell Skript, das die QAD Extensions nutzt (), war sehr hilfreich.
Clear-History Clear-Host $users = Get-QADUser # for single user: $users = Get-QADUser 'uwe' foreach ($Person in $users) { $Person $groups = Get-QADMemberOf $Person -Name "group*" # match all AD-groups with wildcard name "group*" if ($groups) { # avoids error if no group was found foreach ($group in $groups) { "" + $group.get_Name() + "`t" + $Person.get_Name() | Out-File "d:\users_groups.csv" -Append # puts all users into file } } } |
Wenn jemand eine Möglichkeit hat, das ohne die QAD Extensions zu schaffen, bitte informiert mich.
Hier ein Code-Schnipsel, um aus Powershell Word heraus zu starten und das Makro „Uwe“ auszuführen:
$Word = New-Object -Com Word.Application $Word.Visible = $true $oMissing = [System.Reflection.Missing]::Value $Document = $Word.Documents.Add($oMissing, $oMissing, $oMissing, $oMissing) $Word.Run("Uwe") |
Hier noch als kleine Erweiterung die Speicherung des Dokuments im docm
-Format mit Makros:
$Word = New-Object -Com Word.Application $Word.Visible = $true $oMissing = [System.Reflection.Missing]::Value $Document = $Word.Documents.Add($oMissing, $oMissing, $oMissing, $oMissing) # http://msdn.microsoft.com/en-us/library/bb238158%28v=office.12%29.aspx $formatDOCM = [ref] 13 $Document.SaveAs([ref] "C:\testdoc.docm",$formatDOCM) $Word.Run("Uwe") $a = $Word.Quit() |
Hinweis: Dieser Code wurde mit Word 2010 ausprobiert, Word 2007 beschwerte sich über die [ref] Konstrukte in den letzten Zeilen. Wenn man diese löscht, funktioniert es auch mit Word 2007.
Hinweis: Am 10.08.2017 angepasst, dank an Paula!