Konfigruppen aus Fiter erzeugen

Moderators: MVogt, moderators

Post Reply
haku
Posts: 24
Joined: 05. Oct 2009, 10:12
Contact:

Konfigruppen aus Fiter erzeugen

Post by haku » 13. Oct 2010, 15:15

Hallo zusammen,
ich habe folgendes Problem:
Ich habe eine Konfigurationsgruppe in der 3000 Rechner stehen.
Jetzt würde ich gerne aus einem erzeugten Filter auf IP Adressen diese gefunden Rechner in eine neue Konfigruppe verschieben, um die Konfigruppe zu strukturieren.
Ist dies möglich? wen ja wie? oder gibt es eine andere Möglichkeit?

Im Moment wird alles manuell mit deaktivieren Rechner und verschieben in neue Gruppe gemacht.
Ich würde dies gerne automatisieren.


Für einen Tip wäre ich dankbar


Gruß
Haku

User avatar
Hendrik_Ambrosius
Moderator
Moderator
Posts: 8095
Joined: 13. Dec 2004, 23:10
Location: Adendorf/Lüneburg

Re: Konfigruppen aus Fiter erzeugen

Post by Hendrik_Ambrosius » 13. Oct 2010, 19:26

Erst die PCs aus der Konfigurationsgruppe löschen so dass sie zu nicht zugeordneten Computern werden, dann Filteraktionen nutzen um sie zuzuordnen.
Hendrik Ambrosius / Senior Presales Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 GmbH | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 or of the support team.

Olaf Meuther
Posts: 120
Joined: 30. Mar 2007, 09:47
Location: Düsseldorf
Contact:

Re: Konfigruppen aus Fiter erzeugen

Post by Olaf Meuther » 22. Oct 2010, 08:04

Sehr umständlich, Henrik Ambroisius, außer man macht es programmatisch. Außerdem nimmt es nicht die dem PC direkt zugewiesene Softwarepakete und Verteiloptionen mit. Hier drei Routinen, die hier helfen könnten.

TSQL-Statement for the Grundroutine:

PROCEDURE dbo.movingPC(@neuerKonfigurationsgruppe varchar(255), @IPString varchar(12)) AS
DELCARE @Computer varchar(50)
DECLARE @neueTreeID uniqueidentifier
BEGIN

SELECT @neueTreeID = ID FROM dbo.TreeDefinition WHERE Name = @neueKonfigurationsgruppe

DECLARE myComputers CURSOR FOR
SELECT Name FROM dbo.Clients WHERE client_id = (SELECT client_id FROM dbo.InvComputer WHERE
IPAddress Like @IPString

OPEN myComputers

FETCH NEXT FROM myComputers INTO @Computer

WHILE @@FETCH_STATUS = 0
BEGIN
dbo.movePC @Computer, @neueTreeID, emp44Admin, 0
FETCH NEXT FROM myComputers INTO @Computer
END

CLOSE myComputers
DEALLOCATE myComuters
END

TSQL-Statement for the movePC-Routine:

PROCEDURE dbo.movePC(@PCName varchar(255), @TreeID varchar(255), @Subscriber varchar(255), @WOLZeitA INTEGER) AS
DECLARE @Nummer INTEGER
DECLARE @FehlerText varchar(255)
DECLARE @SubScriberID INTEGER
DECLARE @AuftragsName varchar(255)
DECLARE @ActionType INTEGER
DECLARE @ActionCode INTEGER
DECLARE @TargetObjectType INTEGER
DECLARE @AuftragsNummer INTEGER
DECLARE @SoftwareID uniqueidentifier
DECLARE @GroupID uniqueidentifier
DECLARE @DistCommands INTEGER
DECLARE @ScheduleString varchar(129)
DECLARE @RevokeCount INTEGER
DECLARE @PackageName varchar(255)
DECLARE @clientID INTEGER
DECLARE @DomainName varchar(255)
DECLARE @TreeOldID uniqueidentifier
DECLARE @newParentPath varchar(255)
DECLARE @oldParentPath varchar(255)
DECLARE @newGroupID uniqueidentifier
DECLARE @WOLZEIT INTEGER
DECLARE @isPXE INTEGER
DECLARE @SoftwareNamen varchar(255)

BEGIN
-- Anlage neue Konfigurationsgruppe
-- Subscriber holen
print '------ Vorarbeiten -------'
SELECT @TreeOldID = CONVERT(varchar(255), ID) FROM dbo.TreeDefinition WHERE name = @PCNAme
SELECT @oldParentPath = dbo.getGroupPath('', @TreeOldID, 0,'')

SELECT @Nummer = Count(*) FROM dbo.EmpExtSubscribers WHERE Name =@Subscriber
if(@Nummer = 0)
INSERT INTO dbo.EmpExtSubscribers (Name, ExpirationDate) VALUES (@Subscriber, '01.01.2020')
SELECT @SubScriberID= ID FROM dbo.EmpExtSubscribers WHERE Name =@Subscriber

--Auftrag einstellen
print '------ Anlage neue Konfigurationsgruppe PC -------'
SET @AuftragsName = 'Anlonfi_' + @PCName + '_' + CONVERT(varchar, getUTCDate(), 113)
SET @ActionType = 1
SET @ActionCode = 0
SET @TargetObjectType = 3
INSERT INTO dbo.EmpTaskQueue (ID_EmpExtSubscribers, Name, ActionType, ActionCode, TargetObjectType,
Status) VALUES (@SubScriberID, @AuftragsName, @ActionType, @ActionCode, @TargetObjectType, 1)
SELECT @AuftragsNummer = ID FROM dbo.EmpTaskQueue WHERE Name = @AuftragsName

SELECT @newParentPath = dbo.getGroupPath('', @TreeID,0,'')

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value) VALUES
(@AuftragsNummer, 'ParentPath', @newParentPath)
INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value) VALUES
(@AuftragsNummer, 'GroupName', @PCName)

SELECT @Nummer = Status FROM dbo.EmpTaskQueue WHERE Name = @AuftragsName
WHILE (@Nummer < 5)
BEGIN
SELECT @Nummer = Status FROM dbo.EmpTaskQueue WHERE Name = @AuftragsName
END
if (@Nummer = 6)
BEGIN
SELECT @FehlerText = ErrorText FROM dbo.EmpTaskQueue WHERE Name = @AuftragsName
print @FehlerText
END
else
BEGIN
print '------ Neuer Ort ermitteln -------'

SELECT @newGroupID = ID FROM dbo.TreeDefinition WHERE name= @PCName AND Parent= @TreeID

print '------ Softwareübertragen -------'
-- Anlage neue Konfigurationsgruppe erledigt.
-- Software übertragen
DECLARE mySoftware CURSOR FOR
SELECT dbo.Software.SoftwareID,Empirum44.dbo.CompConfGrSoft.TreeID
FROM dbo.Software, Empirum44.dbo.CompConfGrSoft
WHERE dbo.Software.SoftwareID = dbo.CompConfGrSoft.SoftwareID
AND dbo.CompConfGrSoft.TreeID = @TreeOldID

OPEN mySoftware

FETCH NEXT FROM mySoftware INTO @SoftwareID, @GroupID

WHILE @@FETCH_STATUS = 0
BEGIN
if (@Nummer < 6)
BEGIN
-- Software zur neuen Konfigurationsgruppe hinzufügen:
print '----- SoftwarePakete übertragen ----'
SELECT @PackageName = PackageName FROM dbo.Software
WHERE SoftwareID = @SoftwareID

SET @AuftragsName = 'SWKonf_' + @PCName + '_' +
CONVERT(varchar, getUTCDate(), 113)
SET @ActionType = 5
SET @ActionCode = 10
SET @TargetObjectType = 2
INSERT INTO dbo.EmpTaskQueue (ID_EmpExtSubscribers, Name, ActionType,
ActionCode, TargetObjectType, Status) VALUES (@SubScriberID,
@AuftragsName, @ActionType, @ActionCode, @TargetObjectType, 1)
SELECT @AuftragsNummer = ID FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'GroupID', @newGroupID)
INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'PackageName', @PackageName)

SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
WHILE (@Nummer < 5)
BEGIN
SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
END
if (@Nummer = 6)
BEGIN
SELECT @FehlerText = ErrorText FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
print @FehlerText
END
else
BEGIN
-- Software zur neuen Konfigurationsgruppe hinzugefügt
-- Softwareparameter zur neuen Konfigurationsgruppe hinzufügen
SELECT @Nummer= Count(*) FROM dbo.CompGrSwProp
WHERE GroupID = @TreeOldID AND SoftwareID = @SoftwareID

if (@Nummer <> 0)
BEGIN
print '----- Übertrage Verteiloptionen -----'
SELECT @DistCommands= DistCommands FROM
dbo.CompGrSwProp WHERE GroupID = @TreeOldID
AND SoftwareID = @SoftwareID
SET @AuftragsName = 'ParWKonf_' + @PCName + '_' +
CONVERT(varchar, getUTCDate(), 113)
SET @ActionType = 5
SET @ActionCode = 23
SET @TargetObjectType = 2
INSERT INTO dbo.EmpTaskQueue (ID_EmpExtSubscribers,
Name, ActionType, ActionCode, TargetObjectType,
Status) VALUES (@SubScriberID, @AuftragsName,
@ActionType, @ActionCode, @TargetObjectType, 1)

SELECT @AuftragsNummer = ID FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue,
Name, Value) VALUES
(@AuftragsNummer, 'GroupID', @newGroupID)

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue,
Name, Value) VALUES
(@AuftragsNummer, 'PackageName',
@PackageName)

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue,
Name, Value) VALUES
(@AuftragsNummer, 'DistributionCommand',
@DistCommands)

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue,
Name, Value) VALUES
(@AuftragsNummer, 'SchedulerString', "")

SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName

WHILE (@Nummer < 5)
BEGIN
SELECT @Nummer = Status FROM
dbo.EmpTaskQueue WHERE Name =
@AuftragsName
END
if (@Nummer = 6)
BEGIN
SELECT @FehlerText = ErrorText
FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
print @FehlerText
END
END
END
END
-- Softwareparameter zur neuen Softwaregruppe hinzugefügt.
FETCH NEXT FROM mySoftware INTO @SoftwareID, @GroupID
END
CLOSE mySoftware
DEALLOCATE mySoftware
-- PC aus alter Konfigurationsgruppe löschen
SET @Nummer = 0
if (@Nummer < 6) --SPARPOTENIAL
BEGIN
print '------ PC in alter Gruppe löschen -------'

SET @AuftragsName = 'LoescheKG_' + @PCName + '_' +
CONVERT(varchar, getUTCDate(), 113)
SET @ActionType = 2
SET @ActionCode = 0
SET @TargetObjectType = 3
INSERT INTO dbo.EmpTaskQueue (ID_EmpExtSubscribers, Name, ActionType, ActionCode,
TargetObjectType, Status) VALUES (@SubScriberID, @AuftragsName, @ActionType,
@ActionCode, @TargetObjectType, 1)
SELECT @AuftragsNummer = ID FROM dbo.EmpTaskQueue WHERE Name = @AuftragsName

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value) VALUES
(@AuftragsNummer, 'GroupID', CONVERT(varchar(255), @TreeOldID))

SELECT @Nummer = Status FROM dbo.EmpTaskQueue WHERE Name = @AuftragsName
WHILE (@Nummer < 5)
BEGIN
SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
END
if (@Nummer = 6)
BEGIN
SELECT @FehlerText = ErrorText FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
print @FehlerText
END

else
BEGIN
--PC in neuer Konfigurationsgruppe anlegen
print '------ PC in neue Gruppe einpflegen -------'
SET @AuftragsName = 'AnlPCKonf_' + @PCName + '_' +
CONVERT(varchar, getUTCDate(), 113)
SET @ActionType = 5
SET @ActionCode = 10
SET @TargetObjectType = 1

SELECT @DomainName = Domain FROM dbo.clients WHERE name = @PCName

INSERT INTO dbo.EmpTaskQueue (ID_EmpExtSubscribers, Name, ActionType,
ActionCode, TargetObjectType, Status) VALUES (@SubScriberID,
@AuftragsName, @ActionType, @ActionCode, @TargetObjectType, 1)

SELECT @AuftragsNummer = ID FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value) VALUES
(@AuftragsNummer, 'GroupID', @newGroupID)
INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value) VALUES
(@AuftragsNummer, 'ClientName', @PCName)
INSERT INTO Empirum44.dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'Domain', @DomainName)

SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
WHILE (@Nummer < 5)
BEGIN
SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
END
if (@Nummer = 6)
BEGIN
SELECT @FehlerText = ErrorText FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
print @FehlerText
END
else
BEGIN
--Aktiviere PC
SET @isPXE = 0
print '----- Aktiviere PC -----'
SET @WOLZEIT = 0
SET @ActionType = 5
SET @AuftragsName = 'Activate_' + @PCName + '_' +
CONVERT(varchar, getUTCDate(), 113)
SET @ActionCode = 20
SET @TargetObjectType = 1

INSERT INTO dbo.EmpTaskQueue (ID_EmpExtSubscribers, Name,
ActionType, ActionCode, TargetObjectType, Status) VALUES
(@SubscriberID, @AuftragsName, @ActionType, @ActionCode,
@TargetObjectType, 1)

SELECT @AuftragsNummer = dbo.EmpTaskQueue.ID FROM
dbo.EmpTaskQueue WHERE dbo.EmpTaskQueue.Name =
@AuftragsName
SELECT @clientID = dbo.clients.client_ID FROM dbo.clients
WHERE dbo.clients.Name = @PCName

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'ClientID', @clientID)

INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'ClientName', @PCName)
INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'Domain', @DomainName)
INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'GroupID', @newGroupID)
INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'PXE', @isPXE)
INSERT INTO dbo.EmpTaskParam (ID_EmpTaskQueue, Name, Value)
VALUES (@AuftragsNummer, 'WOL', @WOLZEIT)

SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
WHILE (@Nummer < 5)
BEGIN
SELECT @Nummer = Status FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName
END
if (@Nummer = 6)
BEGIN
SELECT @FehlerText = ErrorText
FROM dbo.EmpTaskQueue
WHERE Name = @AuftragsName

print @FehlerText
END
END
END
END
else
BEGIN
SELECT @FehlerText = 'Auftrag wurde abgebrochen!'
print @FehlerText
END
END
END

TSQL-Statement for the getGroupPath-Routine:

Function dbo.getGroupPath(@Name varchar(255), @ID uniqueidentifier, @Nummer INTEGER, @varPath varchar(1012)) RETURNS varchar(1012) AS
BEGIN
DECLARE @varNummer INTEGER
DECLARE @varID uniqueidentifier
DECLARE @varSoftware varchar(1012)

BEGIN
SET @varNummer = @Nummer +1
if(@Nummer = 0)
BEGIN
if (@Name = '')
BEGIN
SELECT @varSoftware = name FROM dbo.TreeDefinition WHERE id = @ID
SET @varID = @ID;
SET @varPath = @varSoftware
END
else
BEGIN
SELECT @varID = ID FROM dbo.TreeDefinition WHERE Name = @Name
SET @varPath = @Name
END

END
else
SET @varID = @ID;

SELECT @varSoftware = A.Name, @varID = A.ID FROM dbo.TreeDefinition A, dbo.TreeDefinition B
WHERE A.ID = B.PARENT AND B.ID = @varID;


BEGIN
if(@varSoftware <> 'IDS_COMPUTER_GROUP_ROOT')
BEGIN
SET @varPath = @varSoftware + '\' + @varPath
SET @Nummer = @Nummer +1
SELECT @varPath = dbo.getGroupPath(@varSoftware, @varID,
@Nummer, @varPath)
END
END
return @varPath
END
END

Viel Spaß!
Dr. Olaf Meuther

Post Reply

Return to “Software Management”

Who is online

Users browsing this forum: No registered users and 5 guests