Archive for the ‘Programmierung’ Category.

Blobs auf der Festplatte speichern

Hier ein Beispiel, wie man Blobs auf die Festplatte extrahieren kann:

http://blogs.technet.com/b/austria/archive/2010/02/25/wie-bekomme-ich-bin-re-dokumente-blobs-aus-dem-sql-server.aspx

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Interessante Powershell-Codeschnipsel

Interessante Powershell-Codeschnipsel findet man unter http://www.msxfaq.de/code/powershell.htm

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Dateien aus Unterordnern auslesen

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

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Powershell: Mit Import-CSV Pfade kopieren

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.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Folien vom Arduino-Workshop auf der Froscon

Hier die Folien vom Arduino-Workshop auf der Froscon.

Arduino-Slides

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Skype Onlinestatus mit C# setzen

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"));
        }
    }
 
}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Mit Powershell Verzeichnisstrukturen prüfen

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
}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Strings mit Excel prüfen

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

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Powershell: aktive Benutzer und ihre Gruppen (active users and their groups)

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.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Word Makros aus Powershell aufrufen

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!

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website