Archiv der Kategorie: Anleitungen

Anleitungen bzw. Beschreibungen zum beheben von Problemen oder zum Umsetzen von bestimmten Projekten.

MSSQL Split bzw. explode function

Ich hatte die letzten Monate über das Vergnügen mein etwas eingestaubtes SQL Wissen wieder auffrischen zu dürfen. Als Folge dessen sind ein paar SQL snippets entstanden die u. U. auch jemandem anderen im Netz helfen könnten.

Als erstes möchte ich eine Funktion mit euch Teilen welche es ermöglicht einen übergebenen String anhand eines Trennzeichens zu zerlegen. Die Funktion ist sehr hilfreich wenn man Daten aus einer Datenbank ziehen muß bei der die Entwickler der Meinung waren, dass es Klug ist bestimmte Informationen einfach nur z. B. durch pipes getrennt in ein varchar Feld zu schreiben…

-- Die Funktion zerlegt einen String anhand eines Trennzeichens und gibt einen definierbaren Teilstring zurück.
-- @param String der zu zerlegenden String
-- @param Delimiter das Trennzeichen anhand dessen der String zerlegt wird
-- @param returnItem die Nummer des Objektes welches zurück gegeben werden soll
-- @return returnslice der Rückgabewert - wenn nichts gefunden wird ist dieser "Null"
-- ChangeLog:
-- 20090505: Erste Version erstellt von Johannes Schmidt (Security-Blog.eu)

if exists (select * from information_schema.routines where routine_name = N'split' and routine_type = 'function') drop function [dbo].[split]
GO
CREATE FUNCTION dbo.split(@String varchar(8000), @Delimiter varchar(12), @returnItem int)
returns varchar(8000)
AS
BEGIN

declare @id int
declare @idx int
declare @slice varchar(8000)
declare @returnslice varchar(8000)

set @id = 0
set @idx = 1
set @returnslice = null

while @idx!= 0
begin
set @id = @id + '1'
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String

if @id = @returnItem set @returnslice = @slice

set @String = SUBSTRING(right(@String,len(@String) - @idx),len(@Delimiter) + 1, len(@String))
if len(@String) = 0 break
end
return @returnslice
end

Anwendungsbeispiel:

Select split('Ich bin ein Test', ' ', 2)

Der Rückgabewert wäre hier „bin“.

Windows Befehle für die Systemprüfung

Um ein Windows Server lokal oder von remote prüfen zu können ist es i. d. R. notwendig einige Informationen zum Betriebssystem abzufragen. Ich habe über die letzten Jahre ein paar nützliche Befehle zusammen getragen und hoffe, dass Sie noch jemandem anderen helfen:

Alle Benutzer aus einem AD Auslesen:

dsquery user -d fragmichnicht.de -uc -limit 0 -o upn > c:\users.txt

Patchlevel lokal auslesen

wmic /output:c:\0010_patchlevel.html qfe list full /format:hform

Patchlevel remote auslesen

wmic /node:127.0.0.1,127.0.0.2,127.0.0.3 /output:c:\0010_patchlevel.html qfe list full /format:hform

Prozesse lokal auslesen

wmic /output:c:\0020_process.html process list full /format:hform

Prozesse remote auslesen

wmic /node:127.0.0.1 /output:c:\0020_process.html process list full /format:hform

Autostart lokal auslesen

wmic /output:c:\0030_autostart.html startup list full /format:hform

Autostart remote auslesen

wmic /node:127.0.0.1 /output:c:\0030_autostart.html startup list full /format:hform

Hardware lokal auslesen

wmic /output:c:\0040_cpu.html cpu list full /format:hform
wmic /output:c:\0050_os.html os list full /format:hform
wmic /output:c:\0060_computersystem.html computersystem list full /format:hform
wmic /output:c:\0070_logicaldisk.html logicaldisk list full /format:hform
wmic /output:c:\0080_csproduct.html csproduct list full /format:hform

Hardware remote auslesen

wmic /node:127.0.0.1 /output:c:\0040_cpu.html cpu list full /format:hform
wmic /node:127.0.0.1 /output:c:\0050_os.html os list full /format:hform
wmic /node:127.0.0.1 /output:c:\0060_computersystem.html computersystem list full /format:hform
wmic /node:127.0.0.1 /output:c:\0070_logicaldisk.html logicaldisk list full /format:hform
wmic /node:127.0.0.1 /output:c:\0080_csproduct.html csproduct list full /format:hform

Lokale Benutzer anzeigen

net user

Loakle Gruppen anzeigen

net localgroup

Mitglieder von bestimmten Gruppen anzeigen

net localgroup administrators

Laufende Services anzeigen

net start

Netzwerkverbindungen

netstat -nao

Debian hinter einem Proxy

Um Debian hinter einem Proxy betreiben zu können, ist es notwendig diesen einzurichten. Die entsprechenden Variablen findet man in der Datei /etc/environment. Hier müssen folgende Werte gesetzt werden:

http_proxy=http://proxy.fragmichnicht.de:8080
ftp_proxy=http://proxy.fragmichnicht.de:8080

Um speziel den Proxy für die Updates via APT einzurichten kann man den Konfigurationswizard von APT verwenden:

apt-setup

Outlook 2007 Business Contact Manager (BCM) läßt sich nicht installieren

Seit einiger Zeit nervt mich beim starten von Outlook 2007 der Business Contact Manager. Dieser möchte von mir installiert werden:

bcm_01-300x218-9851976

Nach der Auswahl von Express oder Erweitert erhalte ich jedoch immer die unschöne Fehlermeldung: „Ein Fehler beendet das STarten von Business Contact Manager für Outlook. Entfernen Sie Business Contact Manager für Outllok und installieren Sie das Programm dann neu…“

bcm_02-300x119-1035064

Eine Option, die mir erlauben würden den BCM (ich brauch ihn ja nicht) zu deinstallieren konnte ich bis jetzt jedoch noch nicht finden und Office wollte ich noch nicht neu installieren.

Auf den MS Seiten habe ich dann nach etwas suchen einen Artikel gefunden der beschreibt wie man das Teil deaktivieren kann indem man ein paar Registryeinträge ändert: KB903094

Auf dem Weg zum Registryeditor (den man als Admin ausführen muß) ist mir dann noch ein weiterer Gedanke gekommen. Ich habe Outlook also noch mal geschlossen und über die rechte Maustaste mit administratorrechten gestarten und siehe da, nach kurzer Zeit. Installation beendet:

bcm_03-300x222-6451723

… ich hätte ja mit viel gerechnet aber nicht damit, dass sich Microsoft in einem aktuellen Produkt nicht an seine Programierrichtlinien hält. UAC ist nun wirklich keine sooo neue Technik, dass man sie noch nicht implementieren sollte…

MSSQL stored procedures, views und functions erstellen

So nachdem ich in letzter Zeit gezwungen wurde wieder ein paar Dinge zu entwickeln verwende ich den Blog jetzt einfach auch mal dafür um SQL Statements für mich abzulegen (braucht man ja alle paar Jahre mal wieder 😉 ). Vielleicht gibts hier im Netz ja noch den einen oder anderen, der genau diese Info auch sucht…

Erstellen einer stored procedure (inkl. löschen wenn diese bereits vorhanden ist):

if exists
  (
  SELECT
    *
  FROM
    dbo.sysobjects
  WHERE
    id = object_id(N'[dbo].[SP_NAME]')
  AND
    OBJECTPROPERTY(id, N'IsProcedure') = 1
  )

DROP PROCEDURE [dbo].[SP_NAME]

GO

CREATE PROCEDURE [dbo].[SP_NAME]

WITH
EXECUTE AS CALLER
AS

...

Erstellen eines views (inkl. löschen wenn dieser bereits vorhanden ist):

if exists
  (
  SELECT
    *
  FROM
    dbo.sysobjects
  WHERE
    id = object_id(N'[dbo].[VIEW_NAME]')
  AND
     OBJECTPROPERTY(id, N'IsView') = 1
  )
DROP VIEW [dbo].[VIEW_NAME]
GO

CREATE VIEW [dbo].[VIEW_NAME]
AS
...

Erstellen einer function (inkl. löschen wenn diese bereits vorhanden ist):

if exists
  (
  SELECT
    *
  FROM
    information_schema.routines
  WHERE
    routine_name = N'FUNKTIONS_NAME'
  AND
    routine_type = 'function'
  ) 

DROP FUNCTION [dbo].[FUNKTIONS_NAME]

GO

CREATE FUNCTION dbo.FUNKTIONS_NAME()
BEGIN
...
END

Grundsätzlich sind die msdn Webseiten zum SQL Server 2008 sehr hilfreich um die genaue Syntax von einzelnen Funktionen zu finden.