Author Archive

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

Windows automatisch runterfahren lassen

Auf http://www.philognosie.net/index.php/tip/tipview/283/ habe ich heute einen eleganten Weg gefunden, Windows per Timer gesteuert herunterfahren zu lassen.

Zusammenfassung (genauer ist es auf der erwähnten Seite beschrieben):

  • Verknüpfung auf C:\WINDOWS\system32\shutdown.exe anlegen
  • Der Verknüpfung die Parameter -s -f -t 600 mitgeben, die 600 steht dabei für die Anzahl der Sekunden, bis der Shutdown beginnt

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

Formulare ausfüllen mit LaTeX

Anbei mal ein Beispiel, wie man mit LaTeX Papierformulare ausfüllen kann, Grundlage war ein eingescanntes Avery Zweckform-Formular vom Typ Überweisungsformular 2816, formular.pdf, über das entsprechende Textfelder gelegt sind. Das geänderte Spacing ist eigentlich nicht nötig, ich wollte aber genau in die einzelnen Buchstabenfelder reindrucken.

\documentclass[fontsize=14pt,ngerman]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[]{graphicx}
 
 
\newcommand{\mybank}{MBS Potsdam}
\newcommand{\myblz}{15070000}
\newcommand{\myaccount}{1234567890}
\newcommand{\sender}{Uwe Ziegenhagen}
\newcommand{\receiver}{Stammtisch}
\newcommand{\receiverbank}{KSK Köln}
\newcommand{\receiverblz}{14080000}
\newcommand{\receiveraccount}{3234567891}
\newcommand{\amount}{123,45----}
\newcommand{\reference}{Beitrag 2010}
\newcommand{\morereference}{Uwe Ziegenhagen,Köln}
 
% to position textblocks on the page
\usepackage[absolute,overlay]{textpos}
\setlength{\TPHorizModule}{1mm}
\setlength{\TPVertModule}{1mm}
 
\usepackage[]{microtype}
%use textls{<Text>} to control space between characters
 
% override definition of pagesize
\usepackage[screen,paperheight=29.7cm,
paperwidth=21cm, left=0mm,right=0mm,
top=0mm,bottom=0mm]{geometry} %
 
\usepackage{eso-pic}
% to include the scanned form in the background
% useful for positioning the boxes
 
\usepackage[num]{isodate} % Date i dd.mm.yyyy Format
 
\newcommand{\mtscale}{250} % scaling factor for the \textls command
\newcommand{\boxfactor}{1.3} % Scalefactor for the text
 
% put everything in one command
\newcommand{\putformtext}[1]{\scalebox{\boxfactor}{\texttt{\textls[\mtscale]{#1}}}} % 
 
\begin{document}
% next line requires scanned form
\AddToShipoutPicture*{\put(0,0){\includegraphics{formular}}}
 
\begin{textblock*}{50mm}(1mm,9mm)
\putformtext{\mybank}
\end{textblock*}
 
\begin{textblock*}{50mm}(65mm,9mm)
\putformtext{\myblz}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,22mm)
\putformtext{\receiver}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,31mm)
\putformtext{\receiveraccount}
\end{textblock*}
 
\begin{textblock*}{50mm}(98mm,31mm)
\putformtext{\receiverblz}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,39mm)
\putformtext{\receiverbank}
\end{textblock*}
 
\begin{textblock*}{50mm}(78mm,48mm)
\putformtext{\amount}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,56mm)
\putformtext{\reference}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,65mm)
\putformtext{\morereference}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,73mm)
\putformtext{\sender}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,82mm)
\putformtext{\myaccount}
\end{textblock*}
 
\begin{textblock*}{50mm}(58mm,97mm)
\texttt{\today}
\end{textblock*}
 
%%%%%%%%%%%%%%%%%%%%%%% Zweiter Teil
 
\begin{textblock*}{50mm}(1mm,114mm)
\putformtext{\mybank}
\end{textblock*}
 
 
\begin{textblock*}{50mm}(65mm,114mm)
\putformtext{\myblz}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,128mm)
\putformtext{\receiver}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,137mm)
\putformtext{\receiveraccount}
\end{textblock*}
 
\begin{textblock*}{50mm}(98mm,137mm)
\putformtext{\receiverblz}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,145mm)
\putformtext{\receiverbank}
\end{textblock*}
 
\begin{textblock*}{50mm}(78mm,153mm)
\putformtext{\amount}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,163mm)
\putformtext{\reference}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,170mm)
\putformtext{\morereference}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,179mm)
\putformtext{\sender}
\end{textblock*}
 
\begin{textblock*}{50mm}(2.5mm,188mm)
\putformtext{\myaccount}
\end{textblock*}
\end{document}

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

MathJax

MathJax (http://www.mathjax.org/) ist ein Projekt der American Mathematical Society und DesignScience, den Machern des MS Office Formel Add-Ins. Es erlaubt das einfache Rendering von Formeln in allen modernen Browsern, für WordPress gibt es ein Plugin.

[latex]E=mc^2[/latex]

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

Terme wegstreichen mit LaTeX

Ausgehend von einer Frage auf der MikTeX-Mailingliste hier ein schönes Beispiel für das Wegstreichen von Termen mit Hilfe des cancel-Pakets, gefunden unter http://anrg.usc.edu/~joonahn/www/index.php/Canceling_Terms_in_LaTeX_Math:

\documentclass{scrartcl}
\usepackage{cancel} 
\begin{document}
 
\[ a + b + \cancel{c} = \cancel{c} + d + e \] 
 
\[ a + b + \cancelto{0}{c} = d + e \] 
 
\end{document}

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