Page 1 of 1

Flag PXE bei Computerobjekten sezten

Posted: 08. Aug 2023, 16:46
by IronStorm
Hallo,
ich würde gerne via Powershell SDK das Flag "PXE fähig" für mehrere Rechner setzen.
Image

kann mir einer verraten wie der Command dafür ist??
Ich habe leider in der Doku dafür nichts gefunden.

Vielen Dank und viele Grüße
IronStorm

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 09:46
by Hendrik_Ambrosius
Beispielscript (die letzte Zeile ist die eigentliche Aktivierung):

param([string]$HostName,
[string]$domain,
[string]$mac,
[guid]$groupID)

$HostName="testc2"
$domain="pso"
$mac="123457123499"
$groupID="867da725-435e-4eff-b6f0-bb04ded5f050"
# Connect to Server
$Server=Open-Matrix42ServiceConnection -ServerName APPSRV02 -Port 9200 -UserName sa -Password Matrix42
# Create a new computer
IF($Server.Computers | WHERE{$_.HostName -eq $HostName})
{$computer=$Server.Computers | WHERE{$_.HostName -eq $HostName}}
else
{$computer = New-EmpirumComputer -Server $server -HostName $HostName -DomainName $domain -PhysicalHostId $mac -IsDomainMember $true}

# Search for the Group
Invoke-EmpirumComputerActivation -Server $Server -Computer $computer -Flags PXE

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 10:21
by munzur
Durch die PXE-Aktivierung, wird der Flag in den Computereigenschaften aber nicht gesetzt, oder?

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 10:24
by Hendrik_Ambrosius
Ah, OK - richtig. Hatte ich falsch verstanden.
Werde noch mal gucken, aber dafür habe ich leider glaube ich kein Script.

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 10:32
by Hendrik_Ambrosius
Habe doch noch was gefunden, geht via IsPxe:

$computer=New-EmpirumComputer -Name $ComputerName -DomainName M42 -MacAddress $mac.Replace(":","").ToUpper() -IsDomainMember $true -IsPxe $true -Session $session

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 10:57
by munzur
Das funktioniert aber nur beim Anlegen eines neuen Rechners. Bei Bestandrechnern wird das vermutlich nur über die DB funktionieren. Ich hatte vom Support mal ein SQL Skript bekommen, weiß nur nicht, ob man es hier im Forum veröffentlichen darf. :roll:

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 11:01
by Hendrik_Ambrosius
Wenn das mit dem SQL-Script hilft können Sie es gern hier veröffentlichen.
Ist aber dann nicht via SDK...
Vielleicht mal über Set-EmpirumProperty probieren mit IsPXE?

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 11:21
by munzur
/***********************************************************************
* DESCRIPTION : Creates a record in the table 'Dhcp_Entries' for all clients
* having a macaddress and no PXE flag
***********************************************************************/
DECLARE @ClientID int
DECLARE @MACAddress CHAR(12)
DECLARE @UUID uniqueidentifier
DECLARE @IPAddress varchar(255)
DECLARE @SubnetMask varchar(255)
DECLARE @StandardGateway varchar(255)
DECLARE @DNSServer varchar(255)
DECLARE @Name varchar(50)
DECLARE @PXEID int
--
-- Create missing records in Dhcp_Entries
DECLARE PXE_Cursor CURSOR FOR
SELECT Client_id, MACAddress, UUID, IPAddress, SubnetMask, StandardGateway, DNSServer, [name]
FROM Clients
WHERE LEN(MACAddress) BETWEEN 8 AND 12 AND Client_id NOT IN (SELECT Client_id FROM Dhcp_Entries)
AND MACAddress NOT IN (SELECT macaddress FROM clients WHERE LEN(macaddress) = 12 GROUP BY macaddress HAVING (COUNT(macaddress)) > 1)
AND [name] NOT IN (SELECT [name] FROM clients GROUP BY [name] HAVING (COUNT([name])) > 1)
AND UUID NOT IN (SELECT UUID FROM clients GROUP BY UUID HAVING (COUNT(UUID)) > 1)
AND MACAddress NOT IN (SELECT haddress FROM Dhcp_Entries)
AND [name] NOT IN (SELECT info FROM Dhcp_Entries)
AND UUID NOT IN (SELECT UUID FROM Dhcp_Entries)
--
OPEN PXE_Cursor
FETCH NEXT FROM PXE_Cursor INTO @ClientID, @MACAddress, @UUID, @IPAddress, @SubnetMask, @StandardGateway, @DNSServer, @Name
--
WHILE @@FETCH_STATUS = 0
BEGIN
IF CHARINDEX(',', @StandardGateway) > 0
SET @StandardGateway = Substring(@StandardGateway, 1, CHARINDEX(',', @StandardGateway) - 1);
IF CHARINDEX(',', @DNSServer) > 0
SET @DNSServer = Substring(@DNSServer, 1, CHARINDEX(',', @DNSServer) - 1);
--
INSERT INTO Dhcp_Entries (bootinfo, haddress, ipaddress, netmask, gateway, dns, timelease, info, UUID, Client_id)
VALUES (2, @MACAddress, dbo.fnc_GetFirstIP(@IPAddress), dbo.fnc_GetFirstIP(@SubnetMask), @StandardGateway, @DNSServer, 1000, @Name, @UUID, @ClientID)
SELECT @PXEID = SCOPE_IDENTITY()
UPDATE Clients SET pxe_id = @PXEID WHERE client_id = @ClientID
--PRINT @ClientID
--
FETCH NEXT FROM PXE_Cursor INTO @ClientID, @MACAddress, @UUID, @IPAddress, @SubnetMask, @StandardGateway, @DNSServer, @Name
END
CLOSE PXE_Cursor
DEALLOCATE PXE_Cursor;

-- Set the id of matching Dhcp_Entries to the Clients table
UPDATE Clients SET pxe_id = (SELECT de.id FROM Dhcp_Entries de WHERE de.haddress = MACAddress AND de.UUID = UUID)
WHERE pxe_id NOT IN (SELECT id FROM Dhcp_Entries)


#####################################
Hier wird allerdings für jeden Client das Flag gesetzt.

Re: Flag PXE bei Computerobjekten sezten

Posted: 10. Aug 2023, 16:48
by IronStorm
munzur wrote: 10. Aug 2023, 11:21 /***********************************************************************
* DESCRIPTION : Creates a record in the table 'Dhcp_Entries' for all clients
* having a macaddress and no PXE flag
***********************************************************************/
DECLARE @ClientID int
DECLARE @MACAddress CHAR(12)
DECLARE @UUID uniqueidentifier
DECLARE @IPAddress varchar(255)
DECLARE @SubnetMask varchar(255)
DECLARE @StandardGateway varchar(255)
DECLARE @DNSServer varchar(255)
DECLARE @Name varchar(50)
DECLARE @PXEID int
--
-- Create missing records in Dhcp_Entries
DECLARE PXE_Cursor CURSOR FOR
SELECT Client_id, MACAddress, UUID, IPAddress, SubnetMask, StandardGateway, DNSServer, [name]
FROM Clients
WHERE LEN(MACAddress) BETWEEN 8 AND 12 AND Client_id NOT IN (SELECT Client_id FROM Dhcp_Entries)
AND MACAddress NOT IN (SELECT macaddress FROM clients WHERE LEN(macaddress) = 12 GROUP BY macaddress HAVING (COUNT(macaddress)) > 1)
AND [name] NOT IN (SELECT [name] FROM clients GROUP BY [name] HAVING (COUNT([name])) > 1)
AND UUID NOT IN (SELECT UUID FROM clients GROUP BY UUID HAVING (COUNT(UUID)) > 1)
AND MACAddress NOT IN (SELECT haddress FROM Dhcp_Entries)
AND [name] NOT IN (SELECT info FROM Dhcp_Entries)
AND UUID NOT IN (SELECT UUID FROM Dhcp_Entries)
--
OPEN PXE_Cursor
FETCH NEXT FROM PXE_Cursor INTO @ClientID, @MACAddress, @UUID, @IPAddress, @SubnetMask, @StandardGateway, @DNSServer, @Name
--
WHILE @@FETCH_STATUS = 0
BEGIN
IF CHARINDEX(',', @StandardGateway) > 0
SET @StandardGateway = Substring(@StandardGateway, 1, CHARINDEX(',', @StandardGateway) - 1);
IF CHARINDEX(',', @DNSServer) > 0
SET @DNSServer = Substring(@DNSServer, 1, CHARINDEX(',', @DNSServer) - 1);
--
INSERT INTO Dhcp_Entries (bootinfo, haddress, ipaddress, netmask, gateway, dns, timelease, info, UUID, Client_id)
VALUES (2, @MACAddress, dbo.fnc_GetFirstIP(@IPAddress), dbo.fnc_GetFirstIP(@SubnetMask), @StandardGateway, @DNSServer, 1000, @Name, @UUID, @ClientID)
SELECT @PXEID = SCOPE_IDENTITY()
UPDATE Clients SET pxe_id = @PXEID WHERE client_id = @ClientID
--PRINT @ClientID
--
FETCH NEXT FROM PXE_Cursor INTO @ClientID, @MACAddress, @UUID, @IPAddress, @SubnetMask, @StandardGateway, @DNSServer, @Name
END
CLOSE PXE_Cursor
DEALLOCATE PXE_Cursor;

-- Set the id of matching Dhcp_Entries to the Clients table
UPDATE Clients SET pxe_id = (SELECT de.id FROM Dhcp_Entries de WHERE de.haddress = MACAddress AND de.UUID = UUID)
WHERE pxe_id NOT IN (SELECT id FROM Dhcp_Entries)


#####################################
Hier wird allerdings für jeden Client das Flag gesetzt.

Perfekt!!!
Danke!
Mit dem set-empirumproperty habe ich rumgetestet bin aber irgendwie nicht zum erfolg gekommen weil $targetobject bei mir nie sauber funktionierte egal ob ich ich vorher über get-empirumcomputer die infos in eine $variable geschrieben habe oder den namen direkt angegeben habe :(
Wäre aber nochmal interessant zu erfahren ob das auch funktioniert (ggf über eine Schleife mit einlesen aller Computer)