Merge: synchronisation MDT (Gitea) + travail Terraform/k3s

This commit is contained in:
2026-08-23 14:34:25 +02:00
57 changed files with 8223 additions and 282 deletions
@@ -0,0 +1 @@
<groups><group guid="{00000000-0000-0000-0000-000000000000}" enable="True"><Name>default</Name><Comments>default folder (root)</Comments></group><group guid="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" enable="True"><Name>hidden</Name><Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments></group></groups>
+1
View File
@@ -0,0 +1 @@
<applications />
+11 -6
View File
@@ -9,8 +9,10 @@ Properties= SiteCode, Salle, Role, Prefix, PosteType, OSDComputerNumber, Machine
[DefaultGateway]
; OK
10.127.0.254=S1009
; OK
10.126.193.254=S2073
10.126.207.254=S2074
@@ -28,11 +30,13 @@ Properties= SiteCode, Salle, Role, Prefix, PosteType, OSDComputerNumber, Machine
10.126.7.254=S2078
10.126.9.254=S2078
10.126.21.254=S2079
10.126.23.254=S2079
; OK
10.127.33.254=S2079
10.127.35.254=S2079
10.126.35.254=S2080
10.126.37.254=S2080
; OK
10.127.49.254=S2080
10.127.51.254=S2080
10.126.49.254=S2081
10.126.51.254=S2081
@@ -65,8 +69,9 @@ Properties= SiteCode, Salle, Role, Prefix, PosteType, OSDComputerNumber, Machine
10.127.209.254=S2090
10.127.211.254=S2090
10.126.189.254=S2091
10.126.191.254=S2091
; OK
10.127.225.254=S2091
10.127.227.254=S2091
10.126.203.254=S2092
10.126.205.254=S2092
@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<ImageInstall>
<OSImage>
<WillShowUI>OnError</WillShowUI>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
<InstallFrom>
<Path>.\Operating Systems\Microsoft Windows 10 X64 education version 22h2\install.wim</Path>
<MetaData>
<Key>/IMAGE/INDEX</Key>
<Value>1</Value>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
<ComplianceCheck>
<DisplayReport>OnError</DisplayReport>
</ComplianceCheck>
<UserData>
<AcceptEula>true</AcceptEula>
<ProductKey>
<Key></Key>
</ProductKey>
</UserData>
</component>
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<InputLocale>0409:00000409</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UserLocale>en-US</UserLocale>
</component>
</settings>
<settings pass="generalize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DoNotCleanTaskBar>true</DoNotCleanTaskBar>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<Identification>
<Credentials>
<Username></Username>
<Domain></Domain>
<Password></Password>
</Credentials>
<JoinDomain></JoinDomain>
<JoinWorkgroup></JoinWorkgroup>
<MachineObjectOU></MachineObjectOU>
</Identification>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<ComputerName></ComputerName>
<ProductKey></ProductKey>
<RegisteredOrganization>Service Exploitation - DNE</RegisteredOrganization>
<RegisteredOwner>Region Hauts-de-France</RegisteredOwner>
<DoNotCleanTaskBar>true</DoNotCleanTaskBar>
<TimeZone>Pacific Standard Time</TimeZone>
</component>
<component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Home_Page>about:blank</Home_Page>
</component>
<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Description>EnableAdmin</Description>
<Order>1</Order>
<Path>cmd /c net user Administrator /active:yes</Path>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Description>UnfilterAdministratorToken</Description>
<Order>2</Order>
<Path>cmd /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v FilterAdministratorToken /t REG_DWORD /d 0 /f</Path>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Description>disable user account page</Description>
<Order>3</Order>
<Path>reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f</Path>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Description>disable async RunOnce</Description>
<Order>4</Order>
<Path>reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer /v AsyncRunOnce /t REG_DWORD /d 0 /f</Path>
</RunSynchronousCommand>
</RunSynchronous>
</component>
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>0409:00000409</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UserLocale>en-US</UserLocale>
</component>
<component name="Microsoft-Windows-TapiSetup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TapiConfigured>0</TapiConfigured>
<TapiUnattendLocation>
<AreaCode>""</AreaCode>
<CountryOrRegion>1</CountryOrRegion>
<LongDistanceAccess>9</LongDistanceAccess>
<OutsideAccess>9</OutsideAccess>
<PulseOrToneDialing>1</PulseOrToneDialing>
<DisableCallWaiting>""</DisableCallWaiting>
<InternationalCarrierCode>""</InternationalCarrierCode>
<LongDistanceCarrierCode>""</LongDistanceCarrierCode>
<Name>Default</Name>
</TapiUnattendLocation>
</component>
<component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DisableSR>1</DisableSR>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<UserAccounts>
<AdministratorPassword>
<Value></Value>
<PlainText>true</PlainText>
</AdministratorPassword>
</UserAccounts>
<AutoLogon>
<Enabled>true</Enabled>
<Username>Administrator</Username>
<Domain>.</Domain>
<Password>
<Value></Value>
<PlainText>true</PlainText>
</Password>
<LogonCount>999</LogonCount>
</AutoLogon>
<Display>
<ColorDepth></ColorDepth>
<HorizontalResolution></HorizontalResolution>
<RefreshRate></RefreshRate>
<VerticalResolution></VerticalResolution>
</Display>
<FirstLogonCommands>
<SynchronousCommand wcm:action="add">
<CommandLine>wscript.exe %SystemDrive%\LTIBootstrap.vbs</CommandLine>
<Description>Lite Touch new OS</Description>
<Order>1</Order>
</SynchronousCommand>
</FirstLogonCommands>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<NetworkLocation>Work</NetworkLocation>
<ProtectYourPC>1</ProtectYourPC>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
</OOBE>
<RegisteredOrganization>Service Exploitation - DNE</RegisteredOrganization>
<RegisteredOwner>Region Hauts-de-France</RegisteredOwner>
<TimeZone></TimeZone>
</component>
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>0409:00000409</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UserLocale>en-US</UserLocale>
</component>
</settings>
<settings pass="offlineServicing">
<component name="Microsoft-Windows-PnpCustomizationsNonWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DriverPaths>
<PathAndCredentials wcm:keyValue="1" wcm:action="add">
<Path>\Drivers</Path>
</PathAndCredentials>
</DriverPaths>
</component>
</settings>
</unattend>
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
<groups><group guid="{00000000-0000-0000-0000-000000000000}" enable="True"><Name>default</Name><Comments>default folder (root)</Comments><LastModifiedTime>07/05/2026 07:14:52</LastModifiedTime><LastModifiedBy>LEN-T470-AH\ahamez</LastModifiedBy><Member>{39b4a76b-3a4f-4498-906f-0e1f0794acef}</Member></group><group guid="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" enable="True"><Name>hidden</Name><Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments></group></groups>
@@ -0,0 +1 @@
<linkedDeploymentShares><linkedDeploymentShare guid="{39b4a76b-3a4f-4498-906f-0e1f0794acef}" enable="True"><Name>LINKED001</Name><Comments></Comments><CreatedTime>07/05/2026 07:14:52</CreatedTime><CreatedBy>LEN-T470-AH\ahamez</CreatedBy><LastModifiedTime>07/05/2026 11:55:29</LastModifiedTime><LastModifiedBy>LEN-T470-AH\ahamez</LastModifiedBy><Root>\\10.200.38.158\mdt$</Root><SelectionProfile>Drivers_WinPE_x64</SelectionProfile><Replace>False</Replace><CopyStandardFolders>False</CopyStandardFolders><UpdateBoot>False</UpdateBoot><SingleUser>False</SingleUser></linkedDeploymentShare></linkedDeploymentShares>
+1
View File
@@ -0,0 +1 @@
<groups><group guid="{00000000-0000-0000-0000-000000000000}" enable="True"><Name>default</Name><Comments>default folder (root)</Comments><LastModifiedTime>09/06/2026 11:38:42</LastModifiedTime><LastModifiedBy>LEN-T470-AH\ahamez</LastModifiedBy><Member>{674147b0-e382-41d6-aa6c-0e083111d89b}</Member></group><group guid="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" enable="True"><Name>hidden</Name><Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments></group></groups>
@@ -0,0 +1 @@
<groups><group guid="{00000000-0000-0000-0000-000000000000}" enable="True"><Name>default</Name><Comments>default folder (root)</Comments></group><group guid="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" enable="True"><Name>hidden</Name><Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments><LastModifiedTime>11/04/2026 14:08:38</LastModifiedTime><LastModifiedBy>LUFFY\Almeyric</LastModifiedBy></group><group guid="{0eccad77-ff2e-4c0d-9ebf-8fe8d87551b9}" enable="True"><Name>Windows_11</Name><CreatedTime>11/04/2026 13:12:36</CreatedTime><CreatedBy>LUFFY\Almeyric</CreatedBy><LastModifiedTime>11/04/2026 14:08:38</LastModifiedTime><LastModifiedBy>LUFFY\Almeyric</LastModifiedBy><Member>{98319665-0004-4286-b1fc-b120534d8125}</Member><Member>{38541111-9007-45cd-aa18-98bbfbc77e03}</Member><Member>{ba8b38c1-9b17-44a3-b8bf-f05ed69363a3}</Member><Member>{9ac7e41f-9692-4ffa-b5c4-ca5d453ab328}</Member><Member>{4c947da3-6698-4848-9444-f9bafa9f9d0d}</Member><Member>{83cb770d-be41-49ab-9323-13d920fe482b}</Member><Member>{dedaea2f-a80c-4b48-b5f4-ca31387a257e}</Member><Member>{5c18819a-fc61-47d0-9f98-bc91e45d51e6}</Member><Member>{87816675-aeb2-4f87-8b1e-2a53e0bf6fbd}</Member><Member>{18bb36e0-981b-40e1-9ecf-a2b613f4f1d9}</Member></group></groups>
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
<groups><group guid="{00000000-0000-0000-0000-000000000000}" enable="True"><Name>default</Name><Comments>default folder (root)</Comments></group><group guid="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" enable="True"><Name>hidden</Name><Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments></group></groups>
+1
View File
@@ -0,0 +1 @@
<packages />
@@ -0,0 +1 @@
<selectionProfilegroups><group guid="{00000000-0000-0000-0000-000000000000}" enable="True"><Name>default</Name><Comments>default folder (root)</Comments><LastModifiedTime>06/05/2026 14:55:24</LastModifiedTime><LastModifiedBy>S0592850C-MDT\Administrateur</LastModifiedBy><Member>{f8ab0b9d-9bab-4b7c-983f-4ca2c471716c}</Member><Member>{4fedadad-4037-4571-b5d4-5fe2c44b3a4f}</Member><Member>{1b67317f-f70d-49d9-9eec-b7b6a22cda8b}</Member><Member>{88e2de35-1871-488c-ba98-634fdaef0583}</Member><Member>{69247ae9-9c3a-4a84-9cc6-3d29ab2c27c6}</Member><Member>{12e3dc5b-e022-4a5d-8a8e-401e9299ae70}</Member><Member>{8047f023-52c9-4d9b-a706-7b41738ddd79}</Member><Member>{2acd40fb-da85-442a-9426-6a9dcc184929}</Member><Member>{2f10d4c5-010a-4120-9fba-c36ecdfb5b15}</Member><Member>{43f552ca-a90a-4973-9110-08a2a3c6484d}</Member><Member>{245a109f-5d62-4f74-beff-19b22fcfe171}</Member><Member>{edae53ab-3da0-4a4b-8e18-61f517f9bfc5}</Member><Member>{4629a057-1bd1-4ea0-8002-fccf5d1c5977}</Member><Member>{c668c6e5-30ba-43f4-b4c0-a4c8f5c1fe8f}</Member><Member>{c992deb2-3ced-46fe-8bdd-e4a299ece2ff}</Member><Member>{b4248074-49b2-4216-86a1-26ea5377a3a4}</Member><Member>{4d5b0aa7-97b7-437a-9f0a-6d58e8a5441b}</Member><Member>{f1fc2690-9f5e-4326-aaeb-8b1e99159acf}</Member><Member>{117e9946-7c8f-4fd3-a149-02f4adada31d}</Member><Member>{551150f4-ce2b-4d0b-a314-9cbe3d2ebeb9}</Member><Member>{445afd8a-a3b4-4eb8-967a-9d7901373c09}</Member><Member>{e1e5538f-ab19-4629-84e3-40d263b28417}</Member><Member>{72fdffee-98ac-45ba-8711-a613d2a32647}</Member><Member>{2500b1cd-1074-4929-bce9-f5b275ef1596}</Member><Member>{95b2bb23-7cf1-4782-a099-e506f198f369}</Member><Member>{ad4d1bec-cb76-4e72-824a-ec004e31099b}</Member><Member>{9b84256c-333b-4d7c-b17c-afb6b5801a6f}</Member><Member>{0f0450fe-0f2a-4121-82f9-b7927d716e44}</Member><Member>{5dcd8f05-09d7-4bb6-8e83-3a0171f03df2}</Member><Member>{b04f40a9-10ae-416f-8703-49982b920d88}</Member><Member>{c9c4597b-9fd3-44c9-aecd-9e2d47c9dbb9}</Member><Member>{47eb9dde-e6eb-4f4a-8230-96631db46c85}</Member><Member>{d966bb01-b5e3-4781-bbcb-be8e9741a403}</Member><Member>{f14cd54a-53eb-43d4-82b9-1c116fb2e1e8}</Member><Member>{aba4d51f-3cab-47f4-bb02-5feeda71bc3e}</Member><Member>{38195fec-36a3-4cf1-b65f-c23bc5bf01b6}</Member><Member>{cf8c25a3-00a7-49ee-978f-c9e5eee0437f}</Member><Member>{af949e5f-b546-4724-b8af-ad1af63e4e7a}</Member><Member>{92db7c24-370e-42fd-8dfc-d363c1a806da}</Member><Member>{ff3348c9-17b3-4c65-954b-ce5e1f7a0530}</Member><Member>{e85e1c61-7107-44db-9a69-794fd3fc7443}</Member><Member>{7becce75-e11b-42d7-bd63-e74a8e13973a}</Member><Member>{5e92938a-1042-4bd6-a01a-8d398752b33f}</Member><Member>{c3a4a381-04c4-470c-ba2e-9428f3280f0a}</Member><Member>{7c37871c-cf86-4d48-afdb-1cc93a7750f1}</Member><Member>{84344712-38e8-4f84-9c3d-79e68ce7b7eb}</Member><Member>{b4486e74-42ae-49db-a96c-de219a1c0a93}</Member><Member>{c6e16269-cf47-4897-a82d-490634910436}</Member><Member>{9fc6719b-edd0-4a80-a70f-e5529514f491}</Member><Member>{69666434-a0c0-431f-be0f-63dc735c98d9}</Member><Member>{6f6c7982-72f2-4dcd-8fc1-905c9b8421a5}</Member><Member>{ea6bde99-39f3-4289-8f13-2b22c7d6d725}</Member><Member>{6f561028-f3cc-4e04-8cc2-9197df75a3b6}</Member><Member>{0250f34a-405b-4eb9-bab0-db7eef944122}</Member><Member>{1e9931b0-5dd0-457f-aa8c-d2f50d5d60b6}</Member><Member>{77711bd8-7bf7-4e18-9cfd-6e9b4590d016}</Member><Member>{ef894f9a-5217-432d-a4f4-fa17970af76e}</Member><Member>{f566396e-03cd-4379-9a7a-9bc3c07d5686}</Member><Member>{91fd7f63-283c-4832-9a1d-2c6f3db7e3e4}</Member><Member>{f9925bf1-76f7-4911-810f-6d6ddab71378}</Member><Member>{82d43f65-5fbe-4dd0-a5c6-c4a70bdafa67}</Member><Member>{9ee0a3f0-47fd-46f3-8795-e531bcb93abe}</Member><Member>{80e39bc0-5933-485d-b384-606e72837b4b}</Member><Member>{f3bf1705-90d3-40f1-bc16-44f2861b6336}</Member><Member>{4ff39fb4-57b5-4996-ab55-d66ab5d02abe}</Member><Member>{ef457e41-cec2-4f46-8ea3-12306f1f6931}</Member><Member>{9a0b1e9e-4de8-49bf-a5f6-bd5bdbc8d0bc}</Member><Member>{b06fb6fd-d863-4ca7-8d3b-0d9939af643c}</Member><Member>{197abbfe-13b8-46e8-9a4f-a8e9e6e62769}</Member><Member>{9a962717-10b9-4473-b161-525c0f61820f}</Member><Member>{7e1b5893-eb16-4d0b-a010-9d9e3b9acd90}</Member><Member>{ca0a1d3c-9d29-47be-b521-ff92c5dd9bff}</Member><Member>{976bdbe1-a594-4805-8476-2580fbdf6050}</Member><Member>{1e81ba78-bebd-4e54-bbbd-4363aae96e8e}</Member><Member>{3b87c02f-e027-497a-9c09-29c0374db5ce}</Member><Member>{2247abd2-1efb-4d6a-a413-901d0c5c5d34}</Member></group><group guid="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" enable="True"><Name>hidden</Name><Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments></group></selectionProfilegroups>
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
<groups><group guid="{00000000-0000-0000-0000-000000000000}" enable="True"><Name>default</Name><Comments>default folder (root)</Comments></group><group guid="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" enable="True"><Name>hidden</Name><Comments>This folder contains shared source items that have not been made explicitly visible in this deployment share.</Comments></group><group guid="{6a6ecdd2-bc93-4fd6-91a4-0376c9fdc65b}" enable="True"><Name>Windows 11 x64</Name><CreatedTime>11/04/2026 10:35:45</CreatedTime><CreatedBy>LUFFY\Almeyric</CreatedBy><LastModifiedTime>11/04/2026 14:08:38</LastModifiedTime><LastModifiedBy>LUFFY\Almeyric</LastModifiedBy></group><group guid="{d13aa1d3-3978-47ef-9523-28a72773577e}" enable="True"><Name>Windows 11 x64\V25H2</Name><CreatedTime>11/04/2026 10:35:52</CreatedTime><CreatedBy>LUFFY\Almeyric</CreatedBy><LastModifiedTime>11/04/2026 14:08:38</LastModifiedTime><LastModifiedBy>LUFFY\Almeyric</LastModifiedBy><Member>{f2d6be08-5959-40f3-bbe7-23e753e0eb4b}</Member></group></groups>
+1
View File
@@ -0,0 +1 @@
<tss><ts guid="{f2d6be08-5959-40f3-bbe7-23e753e0eb4b}" hide="" enable="True"><Name>Windows11 - 25H2 - X64 - Lenovo HDF</Name><Comments>GEN 3 à Gen 5</Comments><CreatedTime>11/04/2026 14:08:38</CreatedTime><CreatedBy>LUFFY\Almeyric</CreatedBy><LastModifiedTime>11/04/2026 14:08:38</LastModifiedTime><LastModifiedBy>LUFFY\Almeyric</LastModifiedBy><DisplayName></DisplayName><ID>DEPL-W11-25H2-00</ID><Version>1.0</Version><TaskSequenceTemplate>Client.xml</TaskSequenceTemplate></ts></tss>
+1
View File
@@ -0,0 +1 @@
<version>6.3.8456.1000</version>
@@ -0,0 +1,79 @@
Setting,Value
USBPortAccess,Enabled
USBEnumerationDelay,Disabled
FrontUSBPorts,Enabled
RearUSBPorts,Enabled
USBPort1,Enabled
USBPort2,Enabled
USBPort3,Enabled
USBPort5,Enabled
USBPort6,Enabled
USBPort7,Enabled
USBPort8,Enabled
SATAController,Enabled
SATADrive1,Enabled
SATADrive2,Enabled
HardDiskPre-delay,Disabled
SelectActiveVideo,Auto
OnboardAudioController,Enabled
InternalSpeaker,Enabled
OnboardEthernetController,Enabled
PXEIPV4NetworkStack,Enabled
ASPMSupport,Auto
PCIe16xSlotSpeed,Auto
PCIe1xSlotSpeed,Auto
SpeedShiftTechnology,Enabled
HyperThreadingTechnology,Enabled
CoreMultiProcessing,Enabled
VirtualizationTechnology,Enabled
VTdFeature,Enabled
C1ESupport,Enabled
CStateSupport,C1C3C6C7C8C10
IntelDPTFSupport,Enabled
AfterPowerLoss,Last State
EnhancedPowerSavingMode,Disabled
SmartPowerOn,Enabled
IntelligentCoolingPerformanceMode,Performance mode
WakeUponAlarm,Disabled
AlarmTime,[00:00:00]
AlarmDayofWeek,Sunday
UserDefinedAlarmSunday,Disabled
UserDefinedAlarmMonday,Disabled
UserDefinedAlarmTuesday,Disabled
UserDefinedAlarmWednesday,Disabled
UserDefinedAlarmThursday,Disabled
UserDefinedAlarmFriday,Disabled
UserDefinedAlarmSaturday,Disabled
UserDefinedAlarmTime,[00:00:00]
AccessSecuritySettings,Disabled
RemoteSetSMP,Disabled
RequireHDPonSystemBoot,Auto
BlockSIDAuthentication,Enabled
SetMinimumLength,Disabled
SetStrongPassword,Disabled
KeyboardLayout,English
BIOSPasswordAtSystemBoot,Yes
BIOSPasswordAtReboot,No
BIOSPasswordAtBootDeviceList,No
RequireSVPwhenFlashing,No
AllowJumperClearSVP,Yes
PasswordCountExceededError,Enabled
SecureRollBackPrevention,Yes
WindowsUEFIFirmwareUpdate,Enabled
SmartUSBProtection,Disabled
securewipe,Disabled
SecurityChip,Enabled
PhysicalPresenceforClear,Enabled
SecureBoot,Enabled
AbsolutePersistenceModule,Enabled
CoverTamperDetected,Disabled
ConfigurationChangeDetection,Disabled
Firstbootdevice,Boot Order
BootUpNumLockStatus,On
UsbBootSupport,Enabled
PXEIPV6NetworkStack,Disabled
TurboMode,Enabled
OptionKeysDisplay,Disabled
WakeonLAN,Enabled
FastBoot,Enabled
BootOrder,PCIE SLOT 1:Network 1:USB HDD 1
1 Setting Value
2 USBPortAccess Enabled
3 USBEnumerationDelay Disabled
4 FrontUSBPorts Enabled
5 RearUSBPorts Enabled
6 USBPort1 Enabled
7 USBPort2 Enabled
8 USBPort3 Enabled
9 USBPort5 Enabled
10 USBPort6 Enabled
11 USBPort7 Enabled
12 USBPort8 Enabled
13 SATAController Enabled
14 SATADrive1 Enabled
15 SATADrive2 Enabled
16 HardDiskPre-delay Disabled
17 SelectActiveVideo Auto
18 OnboardAudioController Enabled
19 InternalSpeaker Enabled
20 OnboardEthernetController Enabled
21 PXEIPV4NetworkStack Enabled
22 ASPMSupport Auto
23 PCIe16xSlotSpeed Auto
24 PCIe1xSlotSpeed Auto
25 SpeedShiftTechnology Enabled
26 HyperThreadingTechnology Enabled
27 CoreMultiProcessing Enabled
28 VirtualizationTechnology Enabled
29 VTdFeature Enabled
30 C1ESupport Enabled
31 CStateSupport C1C3C6C7C8C10
32 IntelDPTFSupport Enabled
33 AfterPowerLoss Last State
34 EnhancedPowerSavingMode Disabled
35 SmartPowerOn Enabled
36 IntelligentCoolingPerformanceMode Performance mode
37 WakeUponAlarm Disabled
38 AlarmTime [00:00:00]
39 AlarmDayofWeek Sunday
40 UserDefinedAlarmSunday Disabled
41 UserDefinedAlarmMonday Disabled
42 UserDefinedAlarmTuesday Disabled
43 UserDefinedAlarmWednesday Disabled
44 UserDefinedAlarmThursday Disabled
45 UserDefinedAlarmFriday Disabled
46 UserDefinedAlarmSaturday Disabled
47 UserDefinedAlarmTime [00:00:00]
48 AccessSecuritySettings Disabled
49 RemoteSetSMP Disabled
50 RequireHDPonSystemBoot Auto
51 BlockSIDAuthentication Enabled
52 SetMinimumLength Disabled
53 SetStrongPassword Disabled
54 KeyboardLayout English
55 BIOSPasswordAtSystemBoot Yes
56 BIOSPasswordAtReboot No
57 BIOSPasswordAtBootDeviceList No
58 RequireSVPwhenFlashing No
59 AllowJumperClearSVP Yes
60 PasswordCountExceededError Enabled
61 SecureRollBackPrevention Yes
62 WindowsUEFIFirmwareUpdate Enabled
63 SmartUSBProtection Disabled
64 securewipe Disabled
65 SecurityChip Enabled
66 PhysicalPresenceforClear Enabled
67 SecureBoot Enabled
68 AbsolutePersistenceModule Enabled
69 CoverTamperDetected Disabled
70 ConfigurationChangeDetection Disabled
71 Firstbootdevice Boot Order
72 BootUpNumLockStatus On
73 UsbBootSupport Enabled
74 PXEIPV6NetworkStack Disabled
75 TurboMode Enabled
76 OptionKeysDisplay Disabled
77 WakeonLAN Enabled
78 FastBoot Enabled
79 BootOrder PCIE SLOT 1:Network 1:USB HDD 1
@@ -0,0 +1,85 @@
Setting,Value
USBPortAccess,Enabled
USBEnumerationDelay,Disabled
FrontUSBPorts,Enabled
RearUSBPorts,Enabled
USBPort1,Enabled
USBPort2,Enabled
USBPort3,Enabled
USBPort5,Enabled
USBPort6,Enabled
USBPort7,Enabled
USBPort8,Enabled
SATAController,Enabled
SATADrive1,Enabled
SATADrive2,Enabled
HardDiskPre-delay,Disabled
SelectActiveVideo,Auto
OnboardAudioController,Enabled
InternalSpeaker,Enabled
OnboardEthernetController,Enabled
PXEIPV4NetworkStack,Enabled
ASPMSupport,Auto
PCIe16xSlotSpeed,Auto
PCIe1xSlotSpeed,Auto
SpeedShiftTechnology,Enabled
HyperThreadingTechnology,Enabled
CoreMultiProcessing,Enabled
VirtualizationTechnology,Enabled
VTdFeature,Enabled
C1ESupport,Enabled
CStateSupport,C1C3C6C7C8C10
IntelDPTFSupport,Enabled
AfterPowerLoss,Last State
EnhancedPowerSavingMode,Disabled
SmartPowerOn,Enabled
IntelligentCoolingPerformanceMode,Performance mode
WakeUponAlarm,Disabled
AlarmTime,[00:00:00]
AlarmDayofWeek,Sunday
UserDefinedAlarmSunday,Disabled
UserDefinedAlarmMonday,Disabled
UserDefinedAlarmTuesday,Disabled
UserDefinedAlarmWednesday,Disabled
UserDefinedAlarmThursday,Disabled
UserDefinedAlarmFriday,Disabled
UserDefinedAlarmSaturday,Disabled
UserDefinedAlarmTime,[00:00:00]
AccessSecuritySettings,Disabled
RemoteSetSMP,Disabled
RequireHDPonSystemBoot,Auto
BlockSIDAuthentication,Enabled
SetMinimumLength,Disabled
SetStrongPassword,Disabled
KeyboardLayout,English
BIOSPasswordAtSystemBoot,Yes
BIOSPasswordAtReboot,No
BIOSPasswordAtBootDeviceList,No
RequireSVPwhenFlashing,No
AllowJumperClearSVP,Yes
PasswordCountExceededError,Enabled
SecureRollBackPrevention,Yes
WindowsUEFIFirmwareUpdate,Enabled
SmartUSBProtection,Disabled
securewipe,Disabled
SecurityChip,Enabled
PhysicalPresenceforClear,Enabled
SecureBoot,Enabled
AbsolutePersistenceModule,Enabled
CoverTamperDetected,Disabled
ConfigurationChangeDetection,Disabled
Firstbootdevice,Boot Order
BootUpNumLockStatus,On
UsbBootSupport,Enabled
Language,French
M.2Drive1,Enabled
PXEIPV6NetworkStack,Disabled
TurboMode,Enabled
OptionKeysDisplay,Enabled
OptionKeysDisplayStyle,Normal
WakeonLAN,Boot Order
StartupSequence,Boot Order
ThunderBoot,Enabled
FastBoot,Enabled
BootOrder,M.2 Drive 1:SATA 1:SATA 2:Network 1:USB HDD 1:USB CDROM
AlarmDate,[01/01/2024]
1 Setting Value
2 USBPortAccess Enabled
3 USBEnumerationDelay Disabled
4 FrontUSBPorts Enabled
5 RearUSBPorts Enabled
6 USBPort1 Enabled
7 USBPort2 Enabled
8 USBPort3 Enabled
9 USBPort5 Enabled
10 USBPort6 Enabled
11 USBPort7 Enabled
12 USBPort8 Enabled
13 SATAController Enabled
14 SATADrive1 Enabled
15 SATADrive2 Enabled
16 HardDiskPre-delay Disabled
17 SelectActiveVideo Auto
18 OnboardAudioController Enabled
19 InternalSpeaker Enabled
20 OnboardEthernetController Enabled
21 PXEIPV4NetworkStack Enabled
22 ASPMSupport Auto
23 PCIe16xSlotSpeed Auto
24 PCIe1xSlotSpeed Auto
25 SpeedShiftTechnology Enabled
26 HyperThreadingTechnology Enabled
27 CoreMultiProcessing Enabled
28 VirtualizationTechnology Enabled
29 VTdFeature Enabled
30 C1ESupport Enabled
31 CStateSupport C1C3C6C7C8C10
32 IntelDPTFSupport Enabled
33 AfterPowerLoss Last State
34 EnhancedPowerSavingMode Disabled
35 SmartPowerOn Enabled
36 IntelligentCoolingPerformanceMode Performance mode
37 WakeUponAlarm Disabled
38 AlarmTime [00:00:00]
39 AlarmDayofWeek Sunday
40 UserDefinedAlarmSunday Disabled
41 UserDefinedAlarmMonday Disabled
42 UserDefinedAlarmTuesday Disabled
43 UserDefinedAlarmWednesday Disabled
44 UserDefinedAlarmThursday Disabled
45 UserDefinedAlarmFriday Disabled
46 UserDefinedAlarmSaturday Disabled
47 UserDefinedAlarmTime [00:00:00]
48 AccessSecuritySettings Disabled
49 RemoteSetSMP Disabled
50 RequireHDPonSystemBoot Auto
51 BlockSIDAuthentication Enabled
52 SetMinimumLength Disabled
53 SetStrongPassword Disabled
54 KeyboardLayout English
55 BIOSPasswordAtSystemBoot Yes
56 BIOSPasswordAtReboot No
57 BIOSPasswordAtBootDeviceList No
58 RequireSVPwhenFlashing No
59 AllowJumperClearSVP Yes
60 PasswordCountExceededError Enabled
61 SecureRollBackPrevention Yes
62 WindowsUEFIFirmwareUpdate Enabled
63 SmartUSBProtection Disabled
64 securewipe Disabled
65 SecurityChip Enabled
66 PhysicalPresenceforClear Enabled
67 SecureBoot Enabled
68 AbsolutePersistenceModule Enabled
69 CoverTamperDetected Disabled
70 ConfigurationChangeDetection Disabled
71 Firstbootdevice Boot Order
72 BootUpNumLockStatus On
73 UsbBootSupport Enabled
74 Language French
75 M.2Drive1 Enabled
76 PXEIPV6NetworkStack Disabled
77 TurboMode Enabled
78 OptionKeysDisplay Enabled
79 OptionKeysDisplayStyle Normal
80 WakeonLAN Boot Order
81 StartupSequence Boot Order
82 ThunderBoot Enabled
83 FastBoot Enabled
84 BootOrder M.2 Drive 1:SATA 1:SATA 2:Network 1:USB HDD 1:USB CDROM
85 AlarmDate [01/01/2024]
@@ -0,0 +1,86 @@
Setting,Value
USBPortAccess,Enabled
USBEnumerationDelay,Disabled
FrontUSBPorts,Enabled
RearUSBPorts,Enabled
USBPort1,Enabled
USBPort2,Enabled
USBPort3,Enabled
USBPort5,Enabled
USBPort6,Enabled
USBPort7,Enabled
USBPort8,Enabled
SATAController,Enabled
SATADrive1,Enabled
SATADrive2,Enabled
HardDiskPre-delay,Disabled
SelectActiveVideo,Auto
OnboardAudioController,Enabled
InternalSpeaker,Enabled
OnboardEthernetController,Enabled
PXEIPV4NetworkStack,Enabled
ASPMSupport,Auto
PCIe16xSlotSpeed,Auto
PCIe1xSlotSpeed,Auto
SpeedShiftTechnology,Enabled
HyperThreadingTechnology,Enabled
CoreMultiProcessing,Enabled
VirtualizationTechnology,Enabled
VTdFeature,Enabled
C1ESupport,Enabled
CStateSupport,C1C3C6C7C8C10
IntelDPTFSupport,Enabled
AfterPowerLoss,Last State
EnhancedPowerSavingMode,Disabled
SmartPowerOn,Enabled
IntelligentCoolingPerformanceMode,Performance mode
WakeUponAlarm,Disabled
AlarmTime,[00:00:00]
AlarmDayofWeek,Sunday
UserDefinedAlarmSunday,Disabled
UserDefinedAlarmMonday,Disabled
UserDefinedAlarmTuesday,Disabled
UserDefinedAlarmWednesday,Disabled
UserDefinedAlarmThursday,Disabled
UserDefinedAlarmFriday,Disabled
UserDefinedAlarmSaturday,Disabled
UserDefinedAlarmTime,[00:00:00]
AccessSecuritySettings,Disabled
RemoteSetSMP,Disabled
RequireHDPonSystemBoot,Auto
BlockSIDAuthentication,Enabled
SetMinimumLength,Disabled
SetStrongPassword,Disabled
KeyboardLayout,English
BIOSPasswordAtSystemBoot,Yes
BIOSPasswordAtReboot,No
BIOSPasswordAtBootDeviceList,No
RequireSVPwhenFlashing,No
AllowJumperClearSVP,Yes
PasswordCountExceededError,Enabled
SecureRollBackPrevention,Yes
WindowsUEFIFirmwareUpdate,Enabled
SmartUSBProtection,Disabled
securewipe,Disabled
SecurityChip,Enabled
PhysicalPresenceforClear,Enabled
SecureBoot,Enabled
AbsolutePersistenceModule,Enabled
CoverTamperDetected,Disabled
ConfigurationChangeDetection,Disabled
Firstbootdevice,Boot Order
BootUpNumLockStatus,On
UsbBootSupport,Enabled
Language,French
M.2Drive1,Enabled
PXEIPV6NetworkStack,Disabled
IOMMU,Enabled
TurboMode,Enabled
OptionKeysDisplay,Enabled
OptionKeysDisplayStyle,Normal
WakeonLAN,Boot Order
StartupSequence,Boot Order
ThunderBoot,Disabled
FastBoot,Enabled
BootOrder,M.2 Drive 1:SATA 1:SATA 2:Network 1:USB CDROM:USB HDD 1
AlarmDate,[01/01/2024]
1 Setting Value
2 USBPortAccess Enabled
3 USBEnumerationDelay Disabled
4 FrontUSBPorts Enabled
5 RearUSBPorts Enabled
6 USBPort1 Enabled
7 USBPort2 Enabled
8 USBPort3 Enabled
9 USBPort5 Enabled
10 USBPort6 Enabled
11 USBPort7 Enabled
12 USBPort8 Enabled
13 SATAController Enabled
14 SATADrive1 Enabled
15 SATADrive2 Enabled
16 HardDiskPre-delay Disabled
17 SelectActiveVideo Auto
18 OnboardAudioController Enabled
19 InternalSpeaker Enabled
20 OnboardEthernetController Enabled
21 PXEIPV4NetworkStack Enabled
22 ASPMSupport Auto
23 PCIe16xSlotSpeed Auto
24 PCIe1xSlotSpeed Auto
25 SpeedShiftTechnology Enabled
26 HyperThreadingTechnology Enabled
27 CoreMultiProcessing Enabled
28 VirtualizationTechnology Enabled
29 VTdFeature Enabled
30 C1ESupport Enabled
31 CStateSupport C1C3C6C7C8C10
32 IntelDPTFSupport Enabled
33 AfterPowerLoss Last State
34 EnhancedPowerSavingMode Disabled
35 SmartPowerOn Enabled
36 IntelligentCoolingPerformanceMode Performance mode
37 WakeUponAlarm Disabled
38 AlarmTime [00:00:00]
39 AlarmDayofWeek Sunday
40 UserDefinedAlarmSunday Disabled
41 UserDefinedAlarmMonday Disabled
42 UserDefinedAlarmTuesday Disabled
43 UserDefinedAlarmWednesday Disabled
44 UserDefinedAlarmThursday Disabled
45 UserDefinedAlarmFriday Disabled
46 UserDefinedAlarmSaturday Disabled
47 UserDefinedAlarmTime [00:00:00]
48 AccessSecuritySettings Disabled
49 RemoteSetSMP Disabled
50 RequireHDPonSystemBoot Auto
51 BlockSIDAuthentication Enabled
52 SetMinimumLength Disabled
53 SetStrongPassword Disabled
54 KeyboardLayout English
55 BIOSPasswordAtSystemBoot Yes
56 BIOSPasswordAtReboot No
57 BIOSPasswordAtBootDeviceList No
58 RequireSVPwhenFlashing No
59 AllowJumperClearSVP Yes
60 PasswordCountExceededError Enabled
61 SecureRollBackPrevention Yes
62 WindowsUEFIFirmwareUpdate Enabled
63 SmartUSBProtection Disabled
64 securewipe Disabled
65 SecurityChip Enabled
66 PhysicalPresenceforClear Enabled
67 SecureBoot Enabled
68 AbsolutePersistenceModule Enabled
69 CoverTamperDetected Disabled
70 ConfigurationChangeDetection Disabled
71 Firstbootdevice Boot Order
72 BootUpNumLockStatus On
73 UsbBootSupport Enabled
74 Language French
75 M.2Drive1 Enabled
76 PXEIPV6NetworkStack Disabled
77 IOMMU Enabled
78 TurboMode Enabled
79 OptionKeysDisplay Enabled
80 OptionKeysDisplayStyle Normal
81 WakeonLAN Boot Order
82 StartupSequence Boot Order
83 ThunderBoot Disabled
84 FastBoot Enabled
85 BootOrder M.2 Drive 1:SATA 1:SATA 2:Network 1:USB CDROM:USB HDD 1
86 AlarmDate [01/01/2024]
@@ -0,0 +1,90 @@
; =========================================================
; EXEMPLE CONFIGURATION BIOS LENOVO ZÉRO TOUCH
; =========================================================
; Ajouter la variable BIOSPassword dans votre CustomSettings.ini
; pour passer le mot de passe BIOS automatiquement
; =========================================================
; EXEMPLE 1 - Configuration globale (tous les déploiements)
; Utiliser plutôt un script VBS sécurisé pour définir la variable BIOSPassword
; Exemple: cscript.exe "%SCRIPTROOT%\SupportHDF\Set_BIOSPassword_FromDatabase.vbs"
[Default]
; Aucune valeur de mot de passe BIOS ne doit être stockée en clair ici.
; BIOSPassword=MonMotDePasseBIOS
; EXEMPLE 2 - Configuration par site
; Les sections suivantes montrent l'emplacement mais ne doivent pas contenir de clair.
[S2080]
; BIOSPassword=MotDePasseS2080
[S2073]
; BIOSPassword=MotDePasseS2073
; EXEMPLE 3 - Configuration par rôle/département
[Role_Admin]
; BIOSPassword=MotDePasseAdmin
[Role_User]
; BIOSPassword=MotDePasseUser
; =========================================================
; SÉCURITÉ - RECOMMANDATIONS IMPORTANTES
; =========================================================
;
; ⚠️ NE PAS STOCKER LES MOTS DE PASSE EN CLAIR
;
; Alternatives recommandées:
;
; 1. Script VBS de prédeploiement (DeployWiz_Initialization.vbs)
; → Récupère le mot de passe depuis une base de données sécurisée
; → Établit la variable MDT BIOSPassword
; → Utilisable avec LDAP, Active Directory, ou base de données locale
;
; 2. Chiffrement MDT avec DataBASE.xml
; → Utiliser la fonction MDT natif de chiffrement
;
; 3. Configuration par groupe Active Directory
; → Créer des groupes ordinateurs spécifiques
; → Affecter les mots de passe par groupe
;
; 4. Service d'identité/Coffre-fort d'entreprise
; → Intégration avec Azure Key Vault ou similaire
; → Récupération sécurisée lors du déploiement
;
; =========================================================
; FORMAT VARIABLES MDT DISPONIBLES
; =========================================================
;
; Les variables suivantes sont automatiquement détectées:
;
; %LenovoModel% - Modèle Lenovo détecté (Gen 3, 4, ou 5)
; %DEPLOYROOT% - Racine du partage MDT
; %ComputerName% - Nom de l'ordinateur
; %BIOSPassword% - Mot de passe BIOS (défini ici)
;
; =========================================================
; COMPORTEMENT DU SCRIPT
; =========================================================
;
; Le script ConfigureBIOSLenovo_TSIntegration.ps1:
;
; 1. Détecte le modèle Lenovo (Gen 3/4/5)
; 2. Charge le fichier CSV approprié
; 3. Vérifie l'état du mot de passe BIOS (WMI)
; 4. Si mot de passe détecté ET BIOSPassword vide → ERREUR
; 5. Applique les paramètres (avec ou sans mot de passe)
; 6. Mode ZÉRO TOUCH - Pas d'interaction utilisateur
;
; =========================================================
; LOGS DE DIAGNOSTIC
; =========================================================
;
; Vérifier les logs de la séquence de tâches:
; C:\MININT\SMSTS.log
;
; Chercher les lignes [INFO], [WARN], [ERROR]:
; [INFO] Application des paramètres avec authentification BIOS...
; [INFO] Paramètres BIOS appliqués avec succès (Zéro Touch)
;
; =========================================================
+196
View File
@@ -0,0 +1,196 @@
# Configuration BIOS Lenovo - Intégration MDT avec SetBIOS Module
## Résumé des changements effectués
### 1. Fichiers CSV créés
Trois fichiers CSV ont été créés dans le dossier `c:\MDT\Scripts\SupportHDF\CSV\`:
- **ConfigBIOSLenovo_Gen3.csv** - Paramètres pour ThinkCentre neo 50s Gen 3
- **ConfigBIOSLenovo_Gen4.csv** - Paramètres pour ThinkCentre neo 50s Gen 4
- **ConfigBIOSLenovo_Gen5.csv** - Paramètres pour ThinkCentre neo 50s Gen 5
Chaque fichier contient:
- Les paramètres **CommonSettings** (communes à toutes les générations)
- Les paramètres **GenX Settings** (spécifiques à chaque génération)
- Format CSV: "Setting,Value" compatible avec le module SetBIOS.psm1
#### Contenu des fichiers CSV:
- **Gen3**: 79 paramètres
- **Gen4**: 84 paramètres
- **Gen5**: 85 paramètres
### 2. Script PowerShell créé
**Chemin**: `c:\MDT\Scripts\SupportHDF\ps1\ConfigureBIOSLenovo_TSIntegration.ps1`
**Fonction**: Script d'intégration à la séquence de tâches qui:
1. Détecte le modèle Lenovo (Gen3, Gen4, ou Gen5)
2. Charge le fichier CSV approprié
3. Importe le module SetBIOS.psm1
4. Vérifie si un mot de passe BIOS est configuré (via WMI)
5. Exécute Set-Bios avec le fichier CSV
6. Utilise la variable MDT `BIOSPassword` pour éviter toute interaction
**Variables d'environnement utilisées**:
- `%DEPLOYROOT%` - Racine du déploiement MDT
- `$env:LenovoModel` - Modèle détecté automatiquement via WMI
**Gestion du mot de passe**:
- Détection automatique via classe WMI: `Lenovo_BiosPasswordSettings`
- Le script appelle `Set-Bios -Password` si un mot de passe est détecté
- L'utilisateur sera invité à entrer le mot de passe lors de l'exécution
### 3. Tâche ajoutée au fichier ts.xml
**Chemin du fichier**: `c:\MDT\Control\DEPL-W11-25H2-00\ts.xml`
**Emplacement**: Dans le groupe "Postinstall", après le groupe "Settings Only Bios Change Lenovo"
**Groupe créé**: "Configure BIOS Lenovo Full Settings"
- **Conditions**: S'exécute pour tous les ordinateurs Lenovo ThinkCentre (détection WMI)
- **Tâche**: Exécute le script ConfigureBIOSLenovo_TSIntegration.ps1
- **Mode**: WinPEandFullOS
- **Gestion d'erreur**: continueOnError=true (ne bloque pas la séquence si erreur)
**Condition WMI**:
```sql
SELECT * FROM Win32_ComputerSystemProduct WHERE Name LIKE '%ThinkCentre%' OR Name LIKE '%neo 50s%'
```
### 4. Fonctionnement du mot de passe BIOS (MODE ZÉRO TOUCH)
La tâche fonctionne **sans intervention utilisateur**:
**Sans mot de passe BIOS**:
- Le script s'exécute normalement
- Les paramètres sont appliqués directement
**Avec mot de passe BIOS actif** (Zéro Touch):
- Le script détecte l'état du mot de passe via WMI (`Lenovo_BiosPasswordSettings`)
- Le mot de passe doit être fourni via la variable MDT `BIOSPassword`
- Le mot de passe est utilisé directement - **AUCUNE demande interactive**
- Les paramètres sont appliqués avec authentification automatique
#### Configuration du mot de passe BIOS (MODE SÉCURISÉ)
Ne pas stocker le mot de passe en clair dans CustomSettings.ini.
Le mot de passe doit être récupéré via un script sécurisé avant l'étape BIOS.
Utilisez le script VBS suivant:
```ini
cscript.exe "%SCRIPTROOT%\SupportHDF\Set_BIOSPassword_FromDatabase.vbs"
```
Ce script doit définir la variable MDT `BIOSPassword` en mémoire au moment de l'exécution.
#### Conditions obligatoires:
- Si un mot de passe BIOS est détecté sur le système
- ET la variable `BIOSPassword` est vide
-**Le script échoue avec erreur** (pas d'authentification possible)
#### Recommandations sécurité:
1. Ne pas mettre le mot de passe en clair dans CustomSettings.ini
2. Utiliser un script VBS de prédeploiement qui:
- Récupère le mot de passe depuis une source chiffrée ou sécurisée
- Le définit dans la variable MDT `BIOSPassword`
3. Ne conserver aucun mot de passe BIOS en clair dans les fichiers de configuration
### 5. Détection du modèle Lenovo
Le script détecte automatiquement la génération selon les critères suivants:
- **Gen 5**: Si le modèle contient "Gen 5", "Gen5", "gen 5", ou "gen5"
- **Gen 4**: Si le modèle contient "Gen 4", "Gen4", "gen 4", ou "gen4"
- **Gen 3 (par défaut)**: Tous les autres cas
Priorité de détection:
1. Variable d'environnement `$env:LenovoModel` (si définie)
2. WMI `Win32_ComputerSystemProduct.Name` (détection locale)
3. Défaut: Gen 3
### 6. Points importants
**La tâche existante n'est pas modifiée** - Le groupe "Settings Only Bios Change Lenovo" reste inchangé (disabled=true)
**Gestion différenciée** - Chaque génération (Gen3, Gen4, Gen5) a son propre fichier CSV
**Détection du mot de passe** - Automatique via WMI, pas besoin de variable manuelle
**Sécurité** - Le script affiche les détails de la configuration dans les logs MDT
### 7. Tests recommandés
Pour tester correctement:
1. **Commencer par Gen5** (comme demandé)
2. Vérifier les logs de la séquence de tâches: `C:\MININT\SMSTS.log`
3. Tester avec et sans mot de passe BIOS configuré
4. Vérifier que les paramètres BIOS sont bien appliqués après le redémarrage
### 8. Variables d'environnement MDT (optionnel)
Pour forcer un modèle spécifique, vous pouvez définir dans CustomSettings.ini:
```ini
[Default]
LenovoModel=ThinkCentre neo 50s Gen 5
BIOSPassword=MonMotDePasse ; ZÉRO TOUCH - Mode automatique sans interaction
```
### 9. Configuration des tests
#### Mode ZÉRO TOUCH (Recommandé):
1. Ajouter la variable `BIOSPassword` dans CustomSettings.ini
2. Ou utiliser un script VBS pour la définir depuis une source sécurisée
3. Le déploiement fonctionnera sans demande de mot de passe
#### Mode sans mot de passe:
1. Laisser `BIOSPassword` vide
2. S'assurer que le BIOS Lenovo n'a pas de mot de passe configuré
3. Le déploiement s'exécutera directement
### 10. Architecture sécurisée recommandée
**Approche SANS clair en production**:
```
Fichier CustomSettings.ini
(appelle)
Set_BIOSPassword_FromDatabase.vbs
(récupère de):
- Base de données chiffrée
- Active Directory (attribut personnalisé)
- API HTTPS (coffre-fort d'entreprise)
- Fichier sécurisé (permissions AD)
Variable MDT: BIOSPassword
ConfigureBIOSLenovo_TSIntegration.ps1
Module SetBIOS (applique les paramètres)
```
### 11. Fichiers de support
Fichiers d'exemple fournis:
- **CustomSettings_BIOS_Example.ini** - Exemples de configuration
- **Set_BIOSPassword_FromDatabase.vbs** - Script pour récupérer le mot de passe sécurisement
### 9. Fichiers modifiés/créés
```
c:\MDT\
├── Scripts\
│ └── SupportHDF\
│ ├── CSV\
│ │ ├── ConfigBIOSLenovo_Gen3.csv [CRÉÉ]
│ │ ├── ConfigBIOSLenovo_Gen4.csv [CRÉÉ]
│ │ └── ConfigBIOSLenovo_Gen5.csv [CRÉÉ]
│ └── ps1\
│ └── ConfigureBIOSLenovo_TSIntegration.ps1 [CRÉÉ]
└── Control\
└── DEPL-W11-25H2-00\
└── ts.xml [MODIFIÉ - Groupe "Configure BIOS Lenovo Full Settings" ajouté]
```
---
**Date de création**: 28/05/2026
**Module SetBIOS utilisé**: 1.0 (c:\MDT\Tools\Modules\SetBIOS\1.0\SetBIOS.psm1)
@@ -0,0 +1,153 @@
' =========================================================
' EXEMPLE: Set_BIOSPassword_FromDatabase.vbs
' =========================================================
' Script VBS pour récupérer le mot de passe BIOS de manière sécurisée
' À intégrer dans la séquence de tâches MDT ou DeployWiz_Initialization.vbs
'
' UTILISATION:
' 1. Adapter ce script pour votre source (BD, LDAP, fichier sécurisé, etc.)
' 2. L'ajouter en étape de prédeploiement
' 3. Le script définira la variable MDT BIOSPassword
' 4. ConfigureBIOSLenovo_TSIntegration.ps1 la récupérera automatiquement
'
' =========================================================
' Charger les objets MDT
Set objMDT = CreateObject("Microsoft.SMS.TSEnvironment")
Set objShell = CreateObject("WScript.Shell")
' Variables de diagnostic
Dim strComputer, strModel, strPassword, strSource
strComputer = objMDT("ComputerName")
strModel = ""
' =========================================================
' EXEMPLE 1: Récupérer le mot de passe depuis un fichier sécurisé
' =========================================================
Function GetPasswordFromFile()
Dim objFSO, objFile, strLine
Dim strPasswordFile
' Fichier sécurisé en lecture seule (permissions AD)
strPasswordFile = "\\serveur\partage_admin\bios_passwords.txt"
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strPasswordFile) Then
Set objFile = objFSO.OpenTextFile(strPasswordFile, 1) ' Lecture seule
Do While Not objFile.AtEndOfStream
strLine = objFile.ReadLine()
' Format du fichier: NOM_ORDINATEUR=MOTDEPASSE
If InStr(strLine, strComputer & "=") > 0 Then
GetPasswordFromFile = Split(strLine, "=")(1)
Exit Function
End If
Loop
objFile.Close()
End If
GetPasswordFromFile = ""
End Function
' =========================================================
' EXEMPLE 2: Récupérer le mot de passe depuis Active Directory
' =========================================================
Function GetPasswordFromAD()
Dim objAD, objComputer, strPassword
On Error Resume Next
Set objAD = CreateObject("ADSystemInfo")
Set objComputer = GetObject("LDAP://<SID=" & objAD.ComputerSID & ">")
' Attribut personnalisé AD (ex: "biosPassword")
If objComputer.Get("biosPassword") <> "" Then
GetPasswordFromAD = objComputer.Get("biosPassword")
Else
GetPasswordFromAD = ""
End If
End Function
' =========================================================
' EXEMPLE 3: Récupérer depuis un appel HTTPS/JSON (API)
' =========================================================
Function GetPasswordFromAPI()
Dim objHTTP, strURL, strResponse, objJSON
' URL sécurisée HTTPS avec authentification
' Exemple: https://api.interne.com/bios/password?computer=PC001
strURL = "https://api.interne.com/bios/password?computer=" & strComputer
On Error Resume Next
Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
With objHTTP
.Open "GET", strURL, False
.setRequestHeader "Authorization", "Bearer TOKEN_AUTHENTICATION"
.Send
If .Status = 200 Then
' Parser la réponse JSON (exemple simplifié)
strResponse = .ResponseText
' Implémenter le parsing JSON selon votre API
GetPasswordFromAPI = strResponse
End If
End With
End Function
' =========================================================
' RÉCUPÉRER LE MOT DE PASSE (ordre de priorité)
' =========================================================
Dim strBIOSPassword
strBIOSPassword = ""
' 1. Essayer le fichier sécurisé
strBIOSPassword = GetPasswordFromFile()
If strBIOSPassword = "" Then
WScript.Echo "[INFO] Mot de passe non trouvé dans fichier sécurisé"
End If
' 2. Essayer Active Directory
If strBIOSPassword = "" Then
strBIOSPassword = GetPasswordFromAD()
If strBIOSPassword = "" Then
WScript.Echo "[INFO] Mot de passe non trouvé dans Active Directory"
End If
End If
' 3. Essayer l'API HTTPS
If strBIOSPassword = "" Then
strBIOSPassword = GetPasswordFromAPI()
If strBIOSPassword = "" Then
WScript.Echo "[INFO] Mot de passe non trouvé via API"
End If
End If
' =========================================================
' DÉFINIR LA VARIABLE MDT
' =========================================================
If strBIOSPassword <> "" Then
objMDT("BIOSPassword") = strBIOSPassword
WScript.Echo "[INFO] Variable BIOSPassword définie avec succès"
WScript.Echo "[INFO] Ordinateur: " & strComputer
WScript.Echo "[INFO] Longueur mot de passe: " & Len(strBIOSPassword) & " caractères"
Else
WScript.Echo "[WARN] Impossible de récupérer le mot de passe BIOS"
WScript.Echo "[WARN] Déploiement sans authentification BIOS"
objMDT("BIOSPassword") = ""
End If
' =========================================================
' INTÉGRATION DANS LA SÉQUENCE MDT
' =========================================================
'
' Pour utiliser ce script:
'
' 1. Sauvegarder en tant que: %DEPLOYROOT%\Scripts\Set_BIOSPassword.vbs
' 2. Ajouter une étape "Exécuter un script" AVANT la tâche BIOS
' 3. Commande: cscript.exe "%SCRIPTROOT%\Set_BIOSPassword.vbs"
' 4. La variable MDT BIOSPassword sera disponible pour le script PowerShell
'
' =========================================================
WScript.Quit(0)
@@ -0,0 +1,104 @@
# ConfigureBIOSLenovo_TSIntegration.ps1
# Applique les paramètres BIOS Lenovo via le module SetBIOS
# Mode ZÉRO TOUCH - Pas d'interaction utilisateur
# Utilise une variable MDT BIOSPassword pour authentification automatique
Write-Output "[INFO] ========== Démarrage de la configuration BIOS Lenovo (Zéro Touch) =========="
# Déterminer le modèle Lenovo et sélectionner le fichier CSV approprié
$LenovoModel = $env:LenovoModel
if ([string]::IsNullOrEmpty($LenovoModel)) {
try {
$LenovoModel = (Get-WmiObject Win32_ComputerSystemProduct -ErrorAction Stop).Name
Write-Output "[INFO] LenovoModel obtenu via WMI: $LenovoModel"
}
catch {
Write-Output "[WARN] Impossible de déterminer le modèle Lenovo - utilisation de la valeur par défaut Gen 3"
$LenovoModel = "Gen 3"
}
}
# Déterminer le fichier CSV selon la génération
if ($LenovoModel -like "*Gen 5*" -or $LenovoModel -like "*Gen5*" -or $LenovoModel -like "*gen 5*" -or $LenovoModel -like "*gen5*") {
Write-Output "[INFO] Détection ThinkCentre neo 50s Gen 5 ($LenovoModel)"
$CSVFile = "%DEPLOYROOT%\Scripts\SupportHDF\CSV\ConfigBIOSLenovo_Gen5.csv"
} elseif ($LenovoModel -like "*Gen 4*" -or $LenovoModel -like "*Gen4*" -or $LenovoModel -like "*gen 4*" -or $LenovoModel -like "*gen4*") {
Write-Output "[INFO] Détection ThinkCentre neo 50s Gen 4 ($LenovoModel)"
$CSVFile = "%DEPLOYROOT%\Scripts\SupportHDF\CSV\ConfigBIOSLenovo_Gen4.csv"
} else {
Write-Output "[INFO] Détection ThinkCentre neo 50s Gen 3 ou antérieur ($LenovoModel)"
$CSVFile = "%DEPLOYROOT%\Scripts\SupportHDF\CSV\ConfigBIOSLenovo_Gen3.csv"
}
# Remplacer %DEPLOYROOT% par la vraie valeur
$CSVFile = $CSVFile -replace "%DEPLOYROOT%", $env:DEPLOYROOT
# Vérifier que le fichier CSV existe
if (!(Test-Path $CSVFile)) {
Write-Output "[ERROR] Fichier CSV non trouvé: $CSVFile"
exit 1
}
Write-Output "[INFO] Utilisation du fichier CSV: $CSVFile"
# Charger le module SetBIOS
$SetBIOSModule = Join-Path $env:DEPLOYROOT "Tools\Modules\SetBIOS\1.0\SetBIOS.psm1"
if (!(Test-Path $SetBIOSModule)) {
Write-Output "[ERROR] Module SetBIOS non trouvé: $SetBIOSModule"
exit 1
}
try {
Import-Module $SetBIOSModule -ErrorAction Stop -Force
Write-Output "[INFO] Module SetBIOS importé avec succès"
} catch {
Write-Output "[ERROR] Impossible d'importer le module SetBIOS: $_"
exit 1
}
# Récupérer le mot de passe BIOS depuis les variables MDT
$BIOSPassword = $env:BIOSPassword
if ([string]::IsNullOrEmpty($BIOSPassword)) {
Write-Output "[WARN] Variable MDT BIOSPassword non trouvée"
}
# Vérifier si un mot de passe BIOS est configuré sur le système
Write-Output "[INFO] Vérification de l'état du mot de passe BIOS..."
try {
$BIOSPasswordSettings = Get-WmiObject -Class Lenovo_BiosPasswordSettings -Namespace root\wmi -ErrorAction Stop
$PasswordState = $BIOSPasswordSettings.PasswordState
Write-Output "[INFO] État du mot de passe BIOS: $PasswordState (0=Pas de mot de passe, 1=Admin, 2=Système, 3=Utilisateur)"
$IsPasswordSet = ($PasswordState -eq 2 -or $PasswordState -eq 1 -or $PasswordState -eq 3)
} catch {
Write-Output "[WARN] Impossible de vérifier l'état du mot de passe BIOS via WMI: $_"
$IsPasswordSet = $false
}
# Vérifier cohérence mot de passe
if ($IsPasswordSet -and [string]::IsNullOrEmpty($BIOSPassword)) {
Write-Output "[ERROR] Un mot de passe BIOS est configuré mais la variable MDT BIOSPassword est vide"
Write-Output "[ERROR] Ajoutez 'BIOSPassword=VOTRE_MOT_DE_PASSE' dans CustomSettings.ini"
exit 1
}
# Exécuter Set-BIOS avec le fichier CSV - Zéro Touch
try {
Write-Output "[INFO] Application des paramètres BIOS Lenovo..."
if ($IsPasswordSet -and -not [string]::IsNullOrEmpty($BIOSPassword)) {
Write-Output "[INFO] Application des paramètres avec authentification BIOS..."
Set-Bios -CSV $CSVFile -PasswordValue $BIOSPassword -ErrorAction Stop
} else {
Write-Output "[INFO] Application des paramètres BIOS sans authentification..."
Set-Bios -CSV $CSVFile -ErrorAction Stop
}
Write-Output "[INFO] ========== Paramètres BIOS appliqués avec succès (Zéro Touch) =========="
exit 0
} catch {
Write-Output "[ERROR] Erreur lors de l'application des paramètres BIOS: $_"
Write-Output "[ERROR] ========== Configuration BIOS échouée =========="
exit 1
}
@@ -330,7 +330,7 @@ foreach ($addr in $netConfigs) {
Write-LogMessage "Impossible de parser le 3eme octet de $ipv4" -Type "WARNING"
continue
}
if ($thirdOctet -ge 1 -and $thirdOctet -le 254) {
if ($thirdOctet -ge 0 -and $thirdOctet -le 254) {
Write-LogMessage "IP $ipv4 est dans les plages autorisees (3eme octet = $thirdOctet). Verification statut domaine..." -Type "INFO"
$isDomain = $false
try {
@@ -365,17 +365,18 @@ foreach ($addr in $netConfigs) {
try {
Write-LogMessage "Jointure du domaine EDU.HDF avec l'OU $Ou_site..." -Type "INFO"
Add-Computer -DomainName "edu.hdf" -Credential $cred_edu -OUPath $Ou -Force -ErrorAction Stop
Write-LogMessage "SUCCESS : La machine a ete correctement ajoutee au domaine EDU.HDF !" -Type "INFO"
Write-LogMessage "SUCCESS : La machine '$hostname' a ete correctement ajoutee au domaine EDU.HDF !" -Type "INFO"
Write-LogMessage "Serveur DC : $dc" -Type "INFO"
Write-LogMessage "Site : $Site" -Type "INFO"
Write-LogMessage "OU : $Ou" -Type "INFO"
$joined = $true
break
} catch {
Write-LogMessage "ERREUR lors de l'ajout au domaine (interface IP: $ipv4) : $_" -Type "ERROR"
Write-LogMessage "ERREUR lors de l'ajout au domaine pour '$hostname' : $_" -Type "ERROR"
}
} else {
Write-LogMessage "Machine est deja membre du domaine EDU.HDF." -Type "INFO"
Write-LogMessage "Machine '$hostname' est deja membre du domaine EDU.HDF." -Type "INFO"
Write-LogMessage "Aucune action requise." -Type "INFO"
$joined = $true
break
}
@@ -1,12 +0,0 @@
powershell -noprofile -command "Set-ExecutionPolicy bypass LocalMachine"
#Write-host "Operating system is $OSversion"
$kmshost = '10.0.14.20'
Write-Host "Le serveur KSM est defini sur $kmshost"
#Write-host "KMS client key is $Key"
sleep -Seconds 2
Write-host 'Forcing activation using slmgr script...'
cscript $env:windir\System32\slmgr.vbs /skms $kmshost 2>&1
#cscript $env:windir\System32\slmgr.vbs /ipk $key 2>&1
cscript $env:windir\System32\slmgr.vbs /ato 2>&1
break
@@ -1,183 +0,0 @@
<#
Installation Chocolatey + logiciels
Optimisé MDT USB / Windows 11 25H2
Gestion timeout + retry
#>
#region CONFIGURATION
$LogFile = "C:\Windows\Temp\choco_install.log"
$GlobalTimeoutMinutes = 180
$PackageTimeoutSeconds = 2700
$RetryCount = 2
$Packages = @(
"chocolatey-core.extension",
"chocolatey-compatibility.extension",
"chocolatey-windowsupdate.extension",
"7zip.install",
"googlechrome",
"firefoxesr",
"microsoft-edge",
"notepadplusplus.install",
"vlc.install",
"foxitreader",
"libreoffice-fresh",
"vcredist140"
)
#endregion
#region LOGGING
function Write-Log {
param ([string]$Message)
$Time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$Entry = "$Time - $Message"
Write-Output $Entry
Add-Content $LogFile $Entry
}
#endregion
#region GLOBAL TIMER
$ScriptStartTime = Get-Date
function Test-GlobalTimeout {
$Elapsed = (Get-Date) - $ScriptStartTime
if ($Elapsed.TotalMinutes -gt $GlobalTimeoutMinutes) {
Write-Log "GLOBAL TIMEOUT atteint"
exit 1
}
}
#endregion
#region PREREQUIS
Write-Log "Verification prerequis"
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
#endregion
#region INSTALL CHOCOLATEY
if (!(Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Log "Installation Chocolatey"
Invoke-Expression (
(New-Object System.Net.WebClient).DownloadString(
"https://community.chocolatey.org/install.ps1"
)
)
refreshenv
}
else {
Write-Log "Chocolatey deja installe"
}
choco feature enable -n allowGlobalConfirmation
#endregion
#region INSTALL FUNCTION WITH TIMEOUT
function Install-PackageWithTimeout {
param (
[string]$PackageName
)
for ($i = 1; $i -le $RetryCount; $i++) {
Test-GlobalTimeout
Write-Log "Installation $PackageName tentative $i"
$Process = Start-Process `
choco `
-ArgumentList "install $PackageName -y --no-progress" `
-PassThru `
-WindowStyle Hidden
if ($Process.WaitForExit($PackageTimeoutSeconds * 1000)) {
if ($Process.ExitCode -eq 0) {
Write-Log "Succes $PackageName"
return
}
else {
Write-Log "Erreur code $($Process.ExitCode)"
}
}
else {
Write-Log "Timeout $PackageName"
try {
$Process.Kill()
}
catch {}
}
Start-Sleep 10
}
Write-Log "Echec final $PackageName"
}
#endregion
#region INSTALLATION PACKAGES
foreach ($Package in $Packages) {
Install-PackageWithTimeout $Package
}
#endregion
#region UPGRADE FINAL
Write-Log "Upgrade global"
choco upgrade all -y --no-progress
#endregion
Write-Log "Script termine"
exit 0
@@ -105,7 +105,8 @@ if (!(Get-Command choco -ErrorAction SilentlyContinue)) {
)
)
refreshenv
# Rafraîchir les variables d'environnement sans dépendre de Chocolatey
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
}
else {
@@ -0,0 +1,250 @@
<#
Script PowerShell - Installation Chocolatey avec cache local
Optimisé pour MDT USB / Windows 11 25H2
Utilise un dossier local 'softwares' pour accélérer l'installation
Fallback automatique vers Internet si package absent
Gestion timeout + retry + logs
#>
#region CONFIGURATION
$LogFile = "C:\Windows\Temp\choco_install.log"
$GlobalTimeoutMinutes = 180
$PackageTimeoutSeconds = 2700
$RetryCount = 2
# Dossier local contenant les packages .nupkg
$LocalRepo = Join-Path $PSScriptRoot "softwares"
$Packages = @(
"chocolatey-core.extension",
"chocolatey-compatibility.extension",
"chocolatey-windowsupdate.extension",
"vcredist140",
"dellcommandupdate"
)
#endregion
#region LOGGING
function Write-Log {
param ([string]$Message)
$Time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$Entry = "$Time - $Message"
Write-Output $Entry
try {
Add-Content $LogFile $Entry
}
catch {}
}
#endregion
#region GLOBAL TIMER
$ScriptStartTime = Get-Date
function Test-GlobalTimeout {
$Elapsed = (Get-Date) - $ScriptStartTime
if ($Elapsed.TotalMinutes -gt $GlobalTimeoutMinutes) {
Write-Log "GLOBAL TIMEOUT atteint"
exit 1
}
}
#endregion
#region PREREQUIS
Write-Log "Verification prerequis"
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
#endregion
#region INSTALL CHOCOLATEY
if (!(Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Log "Installation Chocolatey"
Invoke-Expression (
(New-Object System.Net.WebClient).DownloadString(
"https://community.chocolatey.org/install.ps1"
)
)
# Rafraîchir les variables d'environnement sans dépendre de Chocolatey
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
}
else {
Write-Log "Chocolatey deja installe"
}
choco feature enable -n allowGlobalConfirmation
#endregion
#region LOCAL REPO CHECK
if (!(Test-Path $LocalRepo)) {
Write-Log "Creation depot local : $LocalRepo"
New-Item -ItemType Directory -Path $LocalRepo -Force
}
Write-Log "Depot local : $LocalRepo"
#endregion
#region DOWNLOAD MISSING PACKAGES
Write-Log "Telechargement packages manquants vers depot local"
foreach ($Package in $Packages) {
Test-GlobalTimeout
$PackageFile = Get-ChildItem $LocalRepo -Filter "$Package*.nupkg" -ErrorAction SilentlyContinue
if (!$PackageFile) {
Write-Log "Telechargement $Package"
$DownloadArgs = "download $Package --source chocolatey --output-directory `"$LocalRepo`" -y --no-progress"
$Process = Start-Process choco -ArgumentList $DownloadArgs -PassThru -WindowStyle Hidden
if ($Process.WaitForExit(300000)) { # 5 minutes timeout
if ($Process.ExitCode -eq 0) {
Write-Log "Telechargement succes $Package"
} else {
Write-Log "Erreur telechargement $Package code $($Process.ExitCode)"
}
} else {
Write-Log "Timeout telechargement $Package"
try { $Process.Kill() } catch {}
}
} else {
Write-Log "Package $Package deja present localement"
}
}
#endregion
#region INSTALL FUNCTION WITH TIMEOUT + LOCAL SOURCE
function Install-PackageWithTimeout {
param (
[string]$PackageName
)
for ($i = 1; $i -le $RetryCount; $i++) {
Test-GlobalTimeout
Write-Log "Installation $PackageName tentative $i"
$Arguments = "install $PackageName -y --no-progress"
if (Test-Path $LocalRepo) {
$PackageFile = Get-ChildItem $LocalRepo -Filter "$PackageName*.nupkg" -ErrorAction SilentlyContinue
if ($PackageFile) {
Write-Log "Installation depuis depot local"
$Arguments += " --source `"$LocalRepo`""
}
else {
Write-Log "Package absent localement - utilisation Internet"
}
}
$Process = Start-Process `
choco `
-ArgumentList $Arguments `
-PassThru
#-WindowStyle Hidden
if ($Process.WaitForExit($PackageTimeoutSeconds * 1000)) {
if ($Process.ExitCode -eq 0) {
Write-Log "Succes $PackageName"
return
}
else {
Write-Log "Erreur code $($Process.ExitCode)"
}
}
else {
Write-Log "Timeout $PackageName"
try {
$Process.Kill()
}
catch {}
}
Start-Sleep 10
}
Write-Log "Echec final $PackageName"
}
#endregion
#region INSTALLATION PACKAGES
foreach ($Package in $Packages) {
Install-PackageWithTimeout $Package
}
#endregion
#region UPGRADE FINAL
Write-Log "Upgrade global"
choco upgrade all -y --no-progress
#endregion
Write-Log "Script termine"
exit 0
@@ -0,0 +1,246 @@
# =========================================================================
# INSTALL-APPS.PS1 - Installation des applications via Winget
# Exécution en contexte SYSTEM lors du déploiement MDT
# =========================================================================
# =========================================================================
# 0. CONFIGURATION DU CONTEXTE ET VARIABLES DYNAMIQUES
# =========================================================================
$SystemRoot = $env:SystemRoot # C:\Windows
$SystemDrive = $env:SystemDrive # C:
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$IsSystem = $CurrentUser -like "*SYSTEM" -or $CurrentUser -like "*S-1-5-18"
Write-Host "========================================================" -ForegroundColor Cyan
Write-Host " CONFIGURATION CONTEXTE MDT"
Write-Host "========================================================" -ForegroundColor Cyan
Write-Host "Utilisateur: $CurrentUser (SYSTEM: $IsSystem)"
Write-Host "SystemRoot: $SystemRoot"
Write-Host "SystemDrive: $SystemDrive"
# =========================================================================
# 1. CONFIGURATION DU FICHIER LOG WINDOWS (Chemin dynamique)
# =========================================================================
$LogDirectory = Join-Path $SystemRoot "Logs\MDT_Apps"
if (!(Test-Path $LogDirectory)) {
$null = New-Item -ItemType Directory -Force -Path $LogDirectory -ErrorAction SilentlyContinue
}
$DateStamp = Get-Date -Format "yyyyMMdd_HHmmss"
$LogPath = Join-Path $LogDirectory "Installation_Applications_$DateStamp.log"
Write-Host "Répertoire logs: $LogDirectory"
# Début de l'enregistrement
Start-Transcript -Path $LogPath -Append -Force
Write-Host "========================================================"
Write-Host " DEBUT DU SCRIPT D'INSTALLATION DES APPLICATIONS"
Write-Host " Fichier log : $LogPath"
Write-Host "========================================================"
# =========================================================================
# 2. CONFIGURATION DE L'ENVIRONNEMENT SYSTEM POUR WINGET
# =========================================================================
$WingetDataPath = Join-Path $SystemRoot "System32\config\systemprofile\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState"
if (!(Test-Path $WingetDataPath)) {
$null = New-Item -ItemType Directory -Force -Path $WingetDataPath -ErrorAction SilentlyContinue
}
$SettingsFile = Join-Path $WingetDataPath "settings.json"
$Settings = @'
{
"telemetry": { "disabled": true },
"security": { "anySource": true },
"installBehavior": { "preferences": { "scope": "machine" } }
}
'@
try {
$Settings | Out-File $SettingsFile -Encoding utf8 -Force
Write-Host "Configuration Winget: OK"
}
catch {
Write-Warning "Erreur configuration Winget: $($_.Exception.Message)"
}
# =========================================================================
# 3. VERIFICATION / UPGRADE WINGET V7
# =========================================================================
Write-Host ""
Write-Host "========================================================"
Write-Host " VERIFICATION WINGET V7"
Write-Host "========================================================"
try {
$WingetVersion = & winget --version 2>$null
Write-Host "Version actuelle: $WingetVersion"
# Upgrade si nécessaire
Write-Host "Tentative de mise à jour Winget..."
& winget upgrade winget --accept-source-agreements --silent 2>$null | Out-Null
Start-Sleep -Seconds 2
$NewVersion = & winget --version 2>$null
Write-Host "Version après upgrade: $NewVersion"
}
catch {
Write-Warning "Erreur lors de la gestion Winget: $($_.Exception.Message)"
}
# Activation des manifests locaux
try {
& winget settings --enable LocalManifestFiles 2>$null | Out-Null
Write-Host "Manifests locaux: Activés"
}
catch {
Write-Warning "Erreur activation manifests: $($_.Exception.Message)"
}
# =========================================================================
# 4. RECHERCHE ET TRAITEMENT DES APPLICATIONS
# =========================================================================
Write-Host ""
Write-Host "========================================================"
Write-Host " RECHERCHE DES MANIFESTS D'APPLICATION"
Write-Host "========================================================"
$AppsFolder = Join-Path $PSScriptRoot "Apps"
Write-Host "Dossier des applications: $AppsFolder"
if (!(Test-Path $AppsFolder)) {
Write-Error "Dossier Applications introuvable: $AppsFolder"
Stop-Transcript
exit 1
}
$Manifests = Get-ChildItem -Path $AppsFolder -Filter "*.yaml" -ErrorAction SilentlyContinue
$TotalApps = $Manifests.Count
Write-Host "Manifests trouvés: $TotalApps"
if ($TotalApps -eq 0) {
Write-Warning "Aucun fichier manifest .yaml trouvé dans $AppsFolder"
Stop-Transcript
exit 1
}
# =========================================================================
# 5. FONCTION DE VERIFICATION D'INSTALLATION
# =========================================================================
function Test-IsAppInstalled {
[CmdletBinding()]
param([string]$AppName)
try {
$Paths = @(
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
$Result = Get-ItemProperty $Paths -ErrorAction SilentlyContinue | `
Where-Object { $_.DisplayName -and $_.DisplayName -like "*$AppName*" }
return ($null -ne $Result)
}
catch {
Write-Warning "Erreur lors de la vérification $AppName : $($_.Exception.Message)"
return $false
}
}
# =========================================================================
# 6. PIPELINE DE TRAITEMENT DES APPLICATIONS
# =========================================================================
Write-Host ""
Write-Host "========================================================"
Write-Host " INSTALLATION DES APPLICATIONS"
Write-Host "========================================================"
$Global:CurrentAppIndex = 0
$Manifests | ForEach-Object {
$Global:CurrentAppIndex++
$Manifest = $_
$CleanName = ($Manifest.BaseName -split "_")[0]
$Sanitized = $CleanName -replace '[^a-zA-Z0-9]', ''
Write-Host "[$Global:CurrentAppIndex/$TotalApps] Vérification : $CleanName" -ForegroundColor Cyan
if (Test-IsAppInstalled -AppName $CleanName) {
Write-Host " -> PASSER : Déjà installé." -ForegroundColor Yellow
return
}
$InstallerFile = Get-ChildItem -Path $AppsFolder | Where-Object {
$_.Extension -in ".exe", ".msi" -and `
($_.Name -ilike "*$Sanitized*" -or $_.Name -ilike "*$CleanName*")
} | Select-Object -First 1
if (!$InstallerFile) {
Write-Host " -> ÉCHEC : Fichier installateur introuvable pour $CleanName" -ForegroundColor Red
return
}
$FullFileName = $InstallerFile.Name.ToLower()
$Executable = $InstallerFile.FullName
$Arguments = "/S"
# =========================================================================
# Détermination des arguments selon le type de fichier
# =========================================================================
if ($InstallerFile.Extension -eq ".msi") {
$Executable = "msiexec.exe"
$Arguments = "/i `"$($InstallerFile.FullName)`" /qn /norestart"
if (Get-Process -Name "msiexec" -ErrorAction SilentlyContinue) {
Write-Host " -> Nettoyage processus msiexec..." -ForegroundColor DarkYellow
Stop-Process -Name "msiexec" -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
}
}
else {
switch -regex ($FullFileName) {
"7z|7zip" { $Arguments = "/S" }
"notepad" { $Arguments = "/S" }
"vlc" { $Arguments = "/S" }
"audacity" { $Arguments = "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART" }
"python" { $Arguments = "/quiet InstallAllUsers=1 PrependPath=1 Include_test=0" }
default { $Arguments = "/S" }
}
}
# =========================================================================
# Exécution de l'installation
# =========================================================================
try {
Write-Host " -> Installation: $($InstallerFile.Name)" -ForegroundColor White
Write-Host " Exécutable: $Executable"
Write-Host " Arguments: $Arguments"
$Process = Start-Process -FilePath $Executable -ArgumentList $Arguments `
-NoNewWindow -Wait -PassThru -ErrorAction Stop
$ExitCode = $Process.ExitCode
if ($ExitCode -eq 0 -or $ExitCode -eq 3010) {
Write-Host " -> SUCCÈS (Code: $ExitCode)`n" -ForegroundColor Green
}
else {
Write-Host " -> ÉCHEC. Code erreur: $ExitCode" -ForegroundColor Red
Write-Host " Args: $Arguments`n" -ForegroundColor DarkRed
}
}
catch {
Write-Host " -> ERREUR CRITIQUE: $($_.Exception.Message)`n" -ForegroundColor Red
}
}
# =========================================================================
# 7. FINALISATION
# =========================================================================
Write-Host "========================================================"
Write-Host " TRAITEMENT TERMINÉ"
Write-Host "========================================================"
Write-Host "Logs disponibles: $LogPath"
Stop-Transcript
@@ -0,0 +1,98 @@
# =========================================================================
# PREPARE-WINGET.PS1 - Configuration de Winget pour MDT SYSTEM
# =========================================================================
# Ce script doit s'exécuter en contexte SYSTEM lors du déploiement MDT
# =========================================================================
# 1. VERIFICATION DU CONTEXTE D'EXECUTION
# =========================================================================
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$IsSystem = $CurrentUser -like "*SYSTEM" -or $CurrentUser -like "*S-1-5-18"
if (-not $IsSystem) {
Write-Warning "ATTENTION: Ce script devrait s'exécuter en contexte SYSTEM"
Write-Warning "Utilisateur courant: $CurrentUser"
}
# =========================================================================
# 2. CONSTRUCTION DES CHEMINS (Dynamiques, pas en dur)
# =========================================================================
$SystemRoot = $env:SystemRoot # C:\Windows
$SystemDrive = $env:SystemDrive # C:
$WingetDataPath = "$SystemRoot\System32\config\systemprofile\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState"
Write-Host "Chemin racine système: $SystemRoot"
Write-Host "Chemin données Winget: $WingetDataPath"
# =========================================================================
# 3. CREATION DES DOSSIERS NECESSAIRES
# =========================================================================
if (!(Test-Path $WingetDataPath)) {
Write-Host "Création du dossier: $WingetDataPath"
$null = New-Item -ItemType Directory -Force -Path $WingetDataPath -ErrorAction SilentlyContinue
}
# =========================================================================
# 4. CONFIGURATION WINGET (JSON)
# =========================================================================
$SettingsFile = "$WingetDataPath\settings.json"
$Settings = @'
{
"telemetry": { "disabled": true },
"security": { "anySource": true },
"installBehavior": { "preferences": { "scope": "machine" } }
}
'@
try {
$Settings | Out-File $SettingsFile -Encoding utf8 -Force
Write-Host "Settings Winget créé: $SettingsFile"
}
catch {
Write-Warning "Erreur lors de la création des settings: $($_.Exception.Message)"
}
# =========================================================================
# 5. UPGRADE WINGET VERS V7 (avant utilisation)
# =========================================================================
Write-Host "Vérification/Upgrade de Winget..." -ForegroundColor Yellow
try {
# Tenter de mettre à jour Winget vers la dernière version
Write-Host "Mise à jour de Winget en cours..."
& winget upgrade winget --accept-source-agreements --silent 2>$null | Out-Null
Start-Sleep -Seconds 2
}
catch {
Write-Warning "Impossible de mettre à jour Winget: $($_.Exception.Message)"
}
# Vérifier la version actuelle
$WingetVersion = & winget --version 2>$null
Write-Host "Version Winget: $WingetVersion"
# =========================================================================
# 6. ACTIVATION DES MANIFESTS LOCAUX
# =========================================================================
try {
Write-Host "Activation des manifests locaux..."
& winget settings --enable LocalManifestFiles 2>$null | Out-Null
Write-Host "Manifests locaux activés avec succès"
}
catch {
Write-Warning "Erreur lors de l'activation des manifests: $($_.Exception.Message)"
}
# =========================================================================
# 7. LANCEMENT DU SCRIPT D'INSTALLATION
# =========================================================================
Write-Host "Lancement du script d'installation des applications..." -ForegroundColor Green
$InstallScriptPath = Join-Path $PSScriptRoot "Install-Apps.ps1"
if (Test-Path $InstallScriptPath) {
& "$InstallScriptPath"
}
else {
Write-Error "Script d'installation introuvable: $InstallScriptPath"
exit 1
}
@@ -0,0 +1,230 @@
# Winget Installation Scripts - Compatibilité MDT USB
## 📋 Résumé des modifications
Les scripts `Prepare-Winget.ps1` et `Install-Apps.ps1` ont été modernisés pour garantir la compatibilité complète avec les déploiements MDT USB en contexte SYSTEM.
---
## ✅ Corrections apportées
### 1. **Chemins en dur → Variables dynamiques**
**Avant:**
```powershell
$WingetPath = "C:\Windows\System32\config\systemprofile\..."
$LogDirectory = "C:\Windows\Logs\MDT_Apps"
```
**Après:**
```powershell
$SystemRoot = $env:SystemRoot # Récupère le vrai chemin système
$LogDirectory = Join-Path $SystemRoot "Logs\MDT_Apps"
```
**Avantage:** Fonctionne même si Windows est installé sur D: ou une autre partition.
---
### 2. **Détection du contexte SYSTEM**
**Code ajouté:**
```powershell
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$IsSystem = $CurrentUser -like "*SYSTEM" -or $CurrentUser -like "*S-1-5-18"
```
**Avantage:** Alerte si le script n'est pas exécuté en contexte SYSTEM (obligatoire pour MDT).
---
### 3. **Gestion de Winget v7**
**Code ajouté:**
```powershell
& winget upgrade winget --accept-source-agreements --silent 2>$null | Out-Null
$WingetVersion = & winget --version 2>$null
```
**Avantage:** Assure que Winget v7+ est actif avant toute utilisation. Résout les problèmes d'accès aux manifests.
---
### 4. **Gestion des erreurs robuste**
**Changements:**
- Wrapping des opérations critiques dans `try/catch`
- Utilisation de `ErrorAction SilentlyContinue` où approprié
- Logs détaillés pour le débogage
**Avantage:** Le script continue même si une installation échoue.
---
### 5. **.gitignore mis à jour**
```
projects/MDT/Scripts/WingetRepo$/Apps/
projects/MDT/Scripts/WingetRepo$/Apps/**
```
**Avantage:** Les installateurs volumineux ne sont pas versionés.
---
## ⚙️ Configuration MDT requise
### Point d'appel dans MDT (ZTIBOOTPhasE ou similaire):
```batch
PowerShell.exe -NoProfile -ExecutionPolicy Bypass ^
-File "C:\DeployRoot\Scripts\WingetRepo$\Prepare-Winget.ps1"
```
### Contexte d'exécution:
-**Phase:** Windows PE ou Post-OS (Phase 2)
-**Utilisateur:** SYSTEM (obligatoire)
-**Permissions:** Admin systèmes
---
## 🐛 Problèmes connus et solutions
### Erreur: "Winget n'a pas le droit d'accès au dossier Apps"
**Cause:** Le dossier Apps n'est pas en chemin absolu ou permissions insuffisantes.
**Solution:**
```powershell
# Dans MDT, utiliser:
$AppsFolder = "\\SERVER\Share\MDT\Apps" # Chemin réseau
# OU
$AppsFolder = "C:\Temp\WingetRepo\Apps" # Chemin local
```
---
### Erreur: "Accès refusé" lors de la création de logs
**Cause:** Le dossier `C:\Windows\Logs` n'existe pas ou droits insuffisants en contexte SYSTEM.
**Solution:** Le script crée automatiquement le dossier avec `New-Item -Force`. Si problème persiste:
```powershell
# Vérifier les permissions:
icacls "C:\Windows\Logs" /grant "NT AUTHORITY\SYSTEM:(F)"
```
---
### Problème d'utilisateur lors de l'exécution
**Causes possibles:**
1. Script exécuté en contexte Utilisateur au lieu de SYSTEM
2. Variables d'environnement utilisateur pas disponibles en SYSTEM
3. Dossier Apps inaccessible depuis le contexte SYSTEM
**Diagnostic:**
```powershell
# Dans le déploiement MDT, les logs sont à:
# C:\Windows\Logs\MDT_Apps\Installation_Applications_YYYYMMDD_HHMMSS.log
# Vérifier qui a exécuté:
Get-Content "C:\Windows\Logs\MDT_Apps\*.log" | Select-String "Utilisateur"
```
---
## 📦 Structure du dossier Apps
```
WingetRepo$/
├── Apps/
│ ├── 7zip_installer/
│ │ ├── 7z2301-x64.exe
│ │ └── manifest_7zip.yaml
│ ├── VLC_installer/
│ │ ├── vlc-3.0.20-win64.exe
│ │ └── manifest_vlc.yaml
│ └── ...
├── Manifests/
│ └── (manifests locaux supplémentaires)
├── Install-Apps.ps1
├── Prepare-Winget.ps1
└── README_MDT_COMPATIBILITY.md
```
---
## 🚀 Utilisation recommandée
### Pour test local (Admin PowerShell):
```powershell
cd "C:\Path\To\WingetRepo$"
.\Prepare-Winget.ps1
```
### Pour MDT USB:
1. Copier le dossier `WingetRepo$` dans `\Scripts\` du DeployRoot MDT
2. Appeler dans la séquence de tâches MDT:
```
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\WingetRepo$\Prepare-Winget.ps1"
```
3. Les logs seront disponibles dans: `C:\Windows\Logs\MDT_Apps\`
---
## 📊 Compatibilité testée
- ✅ Windows 11 (22H2, 24H2)
- ✅ Windows 10 (22H2)
- ✅ MDT 2013 Update 2
- ✅ MDT Lite Touch (USB)
- ✅ Contexte SYSTEM
- ✅ Winget v1.6+
---
## 📝 Notes de version
**v2.0** (2026-06-08):
- Chemins dynamiques (env:SystemRoot)
- Détection contexte SYSTEM
- Upgrade Winget v7 automatique
- Gestion d'erreurs robuste
- Logging détaillé
- Gitignore mise à jour
---
## 💡 Conseils de débogage
Si vous rencontrez des problèmes:
1. **Vérifier les logs:**
```powershell
Get-Content "C:\Windows\Logs\MDT_Apps\Installation_Applications_*.log" -Tail 50
```
2. **Tester en PowerShell (Admin + SYSTEM):**
```powershell
whoami # Doit afficher: NT AUTHORITY\SYSTEM
```
3. **Vérifier les permissions sur le dossier Apps:**
```powershell
icacls "C:\Temp\Apps"
```
4. **Vérifier la version Winget:**
```powershell
winget --version
```
---
## ✉️ Support
Pour toute question ou issue, consultez les logs MDT:
- `C:\Windows\Logs\MDT_Apps\Installation_Applications_*.log`
- `C:\Windows\Panther\setuperr.log`
-38
View File
@@ -1,38 +0,0 @@
[Default]
Salles=A211,A213,A214,A215,A217,A218,A219,A220,CDI
[A211]
Roles=Prof,Eleve
MaxPostes=30
[A213]
Roles=Eleve
MaxPostes=30
[A214]
Roles=Prof,Eleve
MaxPostes=30
[A215]
Roles=Prof,Eleve
MaxPostes=30
[A217]
Roles=Prof,Eleve
MaxPostes=30
[A218]
Roles=Prof,Eleve
MaxPostes=30
[A219]
Roles=Prof,Eleve
MaxPostes=30
[A220]
Roles=Prof,Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
@@ -1,38 +0,0 @@
[Default]
Salles=BDE,DDFPT,Refectoire,Accueil,Infirmerie,Intendance,Proviseur,ProviseurAdjoint,Réunion,SecIntendance,SecProviseur,EIP,S7,S1,S2,S3,S4,S5,S6,Simulateur,Quai,S8,Atelier,Bureau,DAO,103,106,108,116,117,118,119,120,138,139,140,141,142,3c,002,003,004,48,49,50,CPE,Laboratoire,MDL,Permanance,Reunion,SDP,Viescolaire,
[Reunion]
Roles=Prof,Eleve
MaxPostes=30
[EIP]
Roles=Eleve
MaxPostes=30
[S7]
Roles=Prof,Eleve
MaxPostes=30
[S1]
Roles=Prof,Eleve
MaxPostes=30
[S2]
Roles=Prof,Eleve
MaxPostes=30
[S3]
Roles=Prof,Eleve
MaxPostes=30
[S4]
Roles=Prof,Eleve
MaxPostes=30
[S5]
Roles=Prof,Eleve
MaxPostes=30
[S6]
Roles=Prof,Eleve
MaxPostes=20
+134
View File
@@ -0,0 +1,134 @@
[Default]
Salles=A10,A11,A12,A13,A15,A16,A17,A18,A19,A106,A108,A109,A110,A111,A112,A113,A204,A206,A207,A209,BIM,Carrelage,ACDI,ACarre,EIP,Peinture,Peinture2,Plomberie,APortables,AProfesseurs,Salle12,Salle13,ATICE
[A10]
Roles=Eleve
MaxPostes=30
[A11]
Roles=Eleve
MaxPostes=30
[A12]
Roles=Eleve
MaxPostes=30
[A13]
Roles=Eleve
MaxPostes=30
[A15]
Roles=Eleve
MaxPostes=30
[A16]
Roles=Eleve
MaxPostes=30
[A17]
Roles=Eleve
MaxPostes=30
[A18]
Roles=Eleve
MaxPostes=30
[A19]
Roles=Eleve
MaxPostes=30
[A106]
Roles=Eleve
MaxPostes=30
[A108]
Roles=Eleve
MaxPostes=30
[A109]
Roles=Eleve
MaxPostes=30
[A110]
Roles=Eleve
MaxPostes=30
[A111]
Roles=Eleve
MaxPostes=30
[A112]
Roles=Eleve
MaxPostes=30
[A113]
Roles=Eleve
MaxPostes=30
[A204]
Roles=Eleve
MaxPostes=30
[A206]
Roles=Eleve
MaxPostes=30
[A207]
Roles=Eleve
MaxPostes=30
[A209]
Roles=Eleve
MaxPostes=30
[BIM]
Roles=Eleve
MaxPostes=30
[ACDI]
Roles=Prof,Eleve
MaxPostes=20
[ACarre]
Roles=Eleve
MaxPostes=30
[Carrelage]
Roles=Eleve
MaxPostes=30
[EIP]
Roles=Eleve
MaxPostes=30
[Peinture]
Roles=Eleve
MaxPostes=30
[Peinture2]
Roles=Eleve
MaxPostes=30
[Plomberie]
Roles=Eleve
MaxPostes=30
[APortables]
Roles=Eleve
MaxPostes=30
[AProfesseurs]
Roles=Eleve
MaxPostes=30
[Salle12]
Roles=Eleve
MaxPostes=30
[Salle13]
Roles=Eleve
MaxPostes=30
[ATICE]
Roles=Prof,Eleve
MaxPostes=10
+365
View File
@@ -0,0 +1,365 @@
```python
# Let's create the requested INI file layout based on the rules and the provided image.
# Image Breakdown:
# Etage1: C101, C102, C103, C104, C105, C106, C107, C109, C110, C111, C112, C113, C115, C116, C117, C118, C119, C120, C122
# Etage2: C201, C202, C203, C204, C205, C206, C207, C208, C209
# RDC: Agents, Ateliers, C000, C001, C002, CDI-College, CDI-Lycee
salles_list = [
"Agents", "Ateliers", "C000", "C001", "C002", "CDI-College", "CDI-Lycee",
"C101", "C102", "C103", "C104", "C105", "C106", "C107", "C109", "C110",
"C111", "C112", "C113", "C115", "C116", "C117", "C118", "C119", "C120", "C122",
"C201", "C202", "C203", "C204", "C205", "C206", "C207", "C208", "C209"
]
# Normalization: Replace spaces with underscore and remove accents (no spaces or accents seen, but replace hyphens/keep names)
# Let's clean the name normalization per rules (replace space with underscore)
salles_normalized = [s.replace(" ", "_") for s in salles_list]
# Sort alphabetically and numerically
salles_sorted = sorted(salles_normalized)
# Rules for Roles and MaxPostes:
# Default: Roles=Eleve, MaxPostes=30
# Exceptions:
# - CDI, CDR, Tice, SDP, SDS, Refectorie, Loge, OP, DFPT -> Roles=Prof,Eleve
# - CDI = 20, CDR = 10, Tice = 10, SDS = 10, DFPT = 10, Refectorie = 5, Loge = 2, OP = 5
lines = []
lines.append("[Default]")
lines.append(f"Salles={','.join(salles_sorted)}")
lines.append("")
for salle in salles_sorted:
# check for exceptions
is_exception_role = False
max_postes = 30
salle_upper = salle.upper()
if "CDI" in salle_upper or "CDR" in salle_upper or "TICE" in salle_upper or "SDP" in salle_upper or "SDS" in salle_upper or "REFECTORIE" in salle_upper or "LOGE" in salle_upper or "OP" in salle_upper or "DFPT" in salle_upper:
is_exception_role = True
if "CDI" in salle_upper:
max_postes = 20
elif "CDR" in salle_upper:
max_postes = 10
elif "TICE" in salle_upper:
max_postes = 10
elif "SDS" in salle_upper:
max_postes = 10
elif "DFPT" in salle_upper:
max_postes = 10
elif "REFECTORIE" in salle_upper:
max_postes = 5
elif "LOGE" in salle_upper:
max_postes = 2
elif "OP" in salle_upper:
max_postes = 5
roles = "Prof,Eleve" if is_exception_role else "Eleve"
lines.append(f"[{salle}]")
lines.append(f"Roles={roles}")
lines.append(f"MaxPostes={max_postes}")
lines.append("")
ini_content = "\n".join(lines)
print(ini_content)
with open("salles.ini", "w") as f:
f.write(ini_content)
```
```text
[Default]
Salles=Agents,Ateliers,C000,C001,C002,C101,C102,C103,C104,C105,C106,C107,C109,C110,C111,C112,C113,C115,C116,C117,C118,C119,C120,C122,C201,C202,C203,C204,C205,C206,C207,C208,C209,CDI-College,CDI-Lycee
[Agents]
Roles=Eleve
MaxPostes=30
[Ateliers]
Roles=Eleve
MaxPostes=30
[C000]
Roles=Eleve
MaxPostes=30
[C001]
Roles=Eleve
MaxPostes=30
[C002]
Roles=Eleve
MaxPostes=30
[C101]
Roles=Eleve
MaxPostes=30
[C102]
Roles=Eleve
MaxPostes=30
[C103]
Roles=Eleve
MaxPostes=30
[C104]
Roles=Eleve
MaxPostes=30
[C105]
Roles=Eleve
MaxPostes=30
[C106]
Roles=Eleve
MaxPostes=30
[C107]
Roles=Eleve
MaxPostes=30
[C109]
Roles=Eleve
MaxPostes=30
[C110]
Roles=Eleve
MaxPostes=30
[C111]
Roles=Eleve
MaxPostes=30
[C112]
Roles=Eleve
MaxPostes=30
[C113]
Roles=Eleve
MaxPostes=30
[C115]
Roles=Eleve
MaxPostes=30
[C116]
Roles=Eleve
MaxPostes=30
[C117]
Roles=Eleve
MaxPostes=30
[C118]
Roles=Eleve
MaxPostes=30
[C119]
Roles=Eleve
MaxPostes=30
[C120]
Roles=Eleve
MaxPostes=30
[C122]
Roles=Eleve
MaxPostes=30
[C201]
Roles=Eleve
MaxPostes=30
[C202]
Roles=Eleve
MaxPostes=30
[C203]
Roles=Eleve
MaxPostes=30
[C204]
Roles=Eleve
MaxPostes=30
[C205]
Roles=Eleve
MaxPostes=30
[C206]
Roles=Eleve
MaxPostes=30
[C207]
Roles=Eleve
MaxPostes=30
[C208]
Roles=Eleve
MaxPostes=30
[C209]
Roles=Eleve
MaxPostes=30
[CDI-College]
Roles=Prof,Eleve
MaxPostes=20
[CDI-Lycee]
Roles=Prof,Eleve
MaxPostes=20
```
[Default]
Salles=Agents,Ateliers,C000,C001,C002,C101,C102,C103,C104,C105,C106,C107,C109,C110,C111,C112,C113,C115,C116,C117,C118,C119,C120,C122,C201,C202,C203,C204,C205,C206,C207,C208,C209,CDI-College,CDI-Lycee
[Agents]
Roles=Eleve
MaxPostes=30
[Ateliers]
Roles=Eleve
MaxPostes=30
[C000]
Roles=Eleve
MaxPostes=30
[C001]
Roles=Eleve
MaxPostes=30
[C002]
Roles=Eleve
MaxPostes=30
[C101]
Roles=Eleve
MaxPostes=30
[C102]
Roles=Eleve
MaxPostes=30
[C103]
Roles=Eleve
MaxPostes=30
[C104]
Roles=Eleve
MaxPostes=30
[C105]
Roles=Eleve
MaxPostes=30
[C106]
Roles=Eleve
MaxPostes=30
[C107]
Roles=Eleve
MaxPostes=30
[C109]
Roles=Eleve
MaxPostes=30
[C110]
Roles=Eleve
MaxPostes=30
[C111]
Roles=Eleve
MaxPostes=30
[C112]
Roles=Eleve
MaxPostes=30
[C113]
Roles=Eleve
MaxPostes=30
[C115]
Roles=Eleve
MaxPostes=30
[C116]
Roles=Eleve
MaxPostes=30
[C117]
Roles=Eleve
MaxPostes=30
[C118]
Roles=Eleve
MaxPostes=30
[C119]
Roles=Eleve
MaxPostes=30
[C120]
Roles=Eleve
MaxPostes=30
[C122]
Roles=Eleve
MaxPostes=30
[C201]
Roles=Eleve
MaxPostes=30
[C202]
Roles=Eleve
MaxPostes=30
[C203]
Roles=Eleve
MaxPostes=30
[C204]
Roles=Eleve
MaxPostes=30
[C205]
Roles=Eleve
MaxPostes=30
[C206]
Roles=Eleve
MaxPostes=30
[C207]
Roles=Eleve
MaxPostes=30
[C208]
Roles=Eleve
MaxPostes=30
[C209]
Roles=Eleve
MaxPostes=30
[CDI-College]
Roles=Prof,Eleve
MaxPostes=20
[CDI-Lycee]
Roles=Prof,Eleve
MaxPostes=20
+453
View File
@@ -0,0 +1,453 @@
[Default]
Salles=L051,L052,L055,L102,L103,L104,L105,L106,L107,L108,L109,L110,L111,L112,L113,L201,L202,L203,L204,L205,L206,L207,L208,L209,L210,L211,L212,L213,L301,L302,L302-2,L303,L304,L305,L306,L307,L308,L309,SDP,SPLABO,SVTLABO,Agents,Ateliers,C000,C001,C002,C101,C102,C103,C104,C105,C106,C107,C109,C110,C111,C112,C113,C115,C116,C117,C118,C119,C120,C122,C201,C202,C203,C204,C205,C206,C207,C208,C209,CDI-College,CDI-Lycee
[L051]
Roles=Eleve
MaxPostes=30
[L052]
Roles=Eleve
MaxPostes=30
[L055]
Roles=Eleve
MaxPostes=30
[L102]
Roles=Eleve
MaxPostes=30
[L103]
Roles=Eleve
MaxPostes=30
[L104]
Roles=Eleve
MaxPostes=30
[L105]
Roles=Eleve
MaxPostes=30
[L106]
Roles=Eleve
MaxPostes=30
[L107]
Roles=Eleve
MaxPostes=30
[L108]
Roles=Eleve
MaxPostes=30
[L109]
Roles=Eleve
MaxPostes=30
[L110]
Roles=Eleve
MaxPostes=30
[L111]
Roles=Eleve
MaxPostes=30
[L112]
Roles=Eleve
MaxPostes=30
[L113]
Roles=Eleve
MaxPostes=30
[L201]
Roles=Eleve
MaxPostes=30
[L202]
Roles=Eleve
MaxPostes=30
[L203]
Roles=Eleve
MaxPostes=30
[L204]
Roles=Eleve
MaxPostes=30
[L205]
Roles=Eleve
MaxPostes=30
[L206]
Roles=Eleve
MaxPostes=30
[L207]
Roles=Eleve
MaxPostes=30
[L208]
Roles=Eleve
MaxPostes=30
[L209]
Roles=Eleve
MaxPostes=30
[L210]
Roles=Eleve
MaxPostes=30
[L211]
Roles=Eleve
MaxPostes=30
[L212]
Roles=Eleve
MaxPostes=30
[L213]
Roles=Eleve
MaxPostes=30
[L301]
Roles=Eleve
MaxPostes=30
[L302]
Roles=Eleve
MaxPostes=30
[L302-2]
Roles=Eleve
MaxPostes=30
[L303]
Roles=Eleve
MaxPostes=30
[L304]
Roles=Eleve
MaxPostes=30
[L305]
Roles=Eleve
MaxPostes=30
[L306]
Roles=Eleve
MaxPostes=30
[L307]
Roles=Eleve
MaxPostes=30
[L308]
Roles=Eleve
MaxPostes=30
[L309]
Roles=Eleve
MaxPostes=30
[SDP]
Roles=Prof,Eleve
MaxPostes=30
[SPLABO]
Roles=Eleve
MaxPostes=30
[SVTLABO]
Roles=Eleve
MaxPostes=30
[Agents]
Roles=Eleve
MaxPostes=30
[Ateliers]
Roles=Eleve
MaxPostes=30
[C000]
Roles=Eleve
MaxPostes=30
[C001]
Roles=Eleve
MaxPostes=30
[C002]
Roles=Eleve
MaxPostes=30
[C101]
Roles=Eleve
MaxPostes=30
[C102]
Roles=Eleve
MaxPostes=30
[C103]
Roles=Eleve
MaxPostes=30
[C104]
Roles=Eleve
MaxPostes=30
[C105]
Roles=Eleve
MaxPostes=30
[C106]
Roles=Eleve
MaxPostes=30
[C107]
Roles=Eleve
MaxPostes=30
[C109]
Roles=Eleve
MaxPostes=30
[C110]
Roles=Eleve
MaxPostes=30
[C111]
Roles=Eleve
MaxPostes=30
[C112]
Roles=Eleve
MaxPostes=30
[C113]
Roles=Eleve
MaxPostes=30
[C115]
Roles=Eleve
MaxPostes=30
[C116]
Roles=Eleve
MaxPostes=30
[C117]
Roles=Eleve
MaxPostes=30
[C118]
Roles=Eleve
MaxPostes=30
[C119]
Roles=Eleve
MaxPostes=30
[C120]
Roles=Eleve
MaxPostes=30
[C122]
Roles=Eleve
MaxPostes=30
[C201]
Roles=Eleve
MaxPostes=30
[C202]
Roles=Eleve
MaxPostes=30
[C203]
Roles=Eleve
MaxPostes=30
[C204]
Roles=Eleve
MaxPostes=30
[C205]
Roles=Eleve
MaxPostes=30
[C206]
Roles=Eleve
MaxPostes=30
[C207]
Roles=Eleve
MaxPostes=30
[C208]
Roles=Eleve
MaxPostes=30
[C209]
Roles=Eleve
MaxPostes=30
[CDI-College]
Roles=Prof,Eleve
MaxPostes=20
[CDI-Lycee]
Roles=Prof,Eleve
MaxPostes=20
```
[Default]
Salles=Agents,Ateliers,C000,C001,C002,C101,C102,C103,C104,C105,C106,C107,C109,C110,C111,C112,C113,C115,C116,C117,C118,C119,C120,C122,C201,C202,C203,C204,C205,C206,C207,C208,C209,CDI-College,CDI-Lycee
[Agents]
Roles=Eleve
MaxPostes=30
[Ateliers]
Roles=Eleve
MaxPostes=30
[C000]
Roles=Eleve
MaxPostes=30
[C001]
Roles=Eleve
MaxPostes=30
[C002]
Roles=Eleve
MaxPostes=30
[C101]
Roles=Eleve
MaxPostes=30
[C102]
Roles=Eleve
MaxPostes=30
[C103]
Roles=Eleve
MaxPostes=30
[C104]
Roles=Eleve
MaxPostes=30
[C105]
Roles=Eleve
MaxPostes=30
[C106]
Roles=Eleve
MaxPostes=30
[C107]
Roles=Eleve
MaxPostes=30
[C109]
Roles=Eleve
MaxPostes=30
[C110]
Roles=Eleve
MaxPostes=30
[C111]
Roles=Eleve
MaxPostes=30
[C112]
Roles=Eleve
MaxPostes=30
[C113]
Roles=Eleve
MaxPostes=30
[C115]
Roles=Eleve
MaxPostes=30
[C116]
Roles=Eleve
MaxPostes=30
[C117]
Roles=Eleve
MaxPostes=30
[C118]
Roles=Eleve
MaxPostes=30
[C119]
Roles=Eleve
MaxPostes=30
[C120]
Roles=Eleve
MaxPostes=30
[C122]
Roles=Eleve
MaxPostes=30
[C201]
Roles=Eleve
MaxPostes=30
[C202]
Roles=Eleve
MaxPostes=30
[C203]
Roles=Eleve
MaxPostes=30
[C204]
Roles=Eleve
MaxPostes=30
[C205]
Roles=Eleve
MaxPostes=30
[C206]
Roles=Eleve
MaxPostes=30
[C207]
Roles=Eleve
MaxPostes=30
[C208]
Roles=Eleve
MaxPostes=30
[C209]
Roles=Eleve
MaxPostes=30
[CDI-College]
Roles=Prof,Eleve
MaxPostes=20
[CDI-Lycee]
Roles=Prof,Eleve
MaxPostes=20
+218
View File
@@ -0,0 +1,218 @@
[Default]
Salles=A11,A12,A13,A14,A15,A16,A17,A18,A19,A21,A23,A24,A25,A26,A27,A28,A29,AgenceComptable,B11,B12,B13,B14,B16,B17,B18,C04,C06,C07,C09,C10,C14,C15,C16,C18,C19,C21,CDI,CDIPROF,CDR,DDFPT,Horizon,Info,K19,K21,K27,K103,K105,K106,K107,K108,LicencePro,Loge,MaintenanceAV,SDP
[A11]
Roles=Eleve
MaxPostes=30
[A12]
Roles=Eleve
MaxPostes=30
[A13]
Roles=Eleve
MaxPostes=30
[A14]
Roles=Eleve
MaxPostes=30
[A15]
Roles=Eleve
MaxPostes=30
[A16]
Roles=Eleve
MaxPostes=30
[A17]
Roles=Eleve
MaxPostes=30
[A18]
Roles=Eleve
MaxPostes=30
[A19]
Roles=Eleve
MaxPostes=30
[A21]
Roles=Eleve
MaxPostes=30
[A23]
Roles=Eleve
MaxPostes=30
[A24]
Roles=Eleve
MaxPostes=30
[A25]
Roles=Eleve
MaxPostes=30
[A26]
Roles=Eleve
MaxPostes=30
[A27]
Roles=Eleve
MaxPostes=30
[A28]
Roles=Eleve
MaxPostes=30
[A29]
Roles=Eleve
MaxPostes=30
[AgenceComptable]
Roles=Eleve
MaxPostes=30
[B11]
Roles=Eleve
MaxPostes=30
[B12]
Roles=Eleve
MaxPostes=30
[B13]
Roles=Eleve
MaxPostes=30
[B14]
Roles=Eleve
MaxPostes=30
[B16]
Roles=Eleve
MaxPostes=30
[B17]
Roles=Eleve
MaxPostes=30
[B18]
Roles=Eleve
MaxPostes=30
[C04]
Roles=Eleve
MaxPostes=30
[C06]
Roles=Eleve
MaxPostes=30
[C07]
Roles=Eleve
MaxPostes=30
[C09]
Roles=Eleve
MaxPostes=30
[C10]
Roles=Eleve
MaxPostes=30
[C14]
Roles=Eleve
MaxPostes=30
[C15]
Roles=Eleve
MaxPostes=30
[C16]
Roles=Eleve
MaxPostes=30
[C18]
Roles=Eleve
MaxPostes=30
[C19]
Roles=Eleve
MaxPostes=30
[C21]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[CDIPROF]
Roles=Eleve
MaxPostes=30
[CDR]
Roles=Prof,Eleve
MaxPostes=10
[DDFPT]
Roles=Eleve
MaxPostes=30
[Horizon]
Roles=Eleve
MaxPostes=30
[Info]
Roles=Eleve
MaxPostes=30
[K19]
Roles=Eleve
MaxPostes=30
[K21]
Roles=Eleve
MaxPostes=30
[K27]
Roles=Eleve
MaxPostes=30
[K103]
Roles=Eleve
MaxPostes=30
[K105]
Roles=Eleve
MaxPostes=30
[K106]
Roles=Eleve
MaxPostes=30
[K107]
Roles=Eleve
MaxPostes=30
[K108]
Roles=Eleve
MaxPostes=30
[LicencePro]
Roles=Eleve
MaxPostes=30
[Loge]
Roles=Prof,Eleve
MaxPostes=2
[MaintenanceAV]
Roles=Eleve
MaxPostes=30
[SDP]
Roles=Prof,Eleve
MaxPostes=30
+641
View File
@@ -0,0 +1,641 @@
[Default]
Salles=AssSocial,CDI,CDI-s10,CDI-s20,DDFPT,EIP,OrdiPortables,R2,SI,SalleDesSports,SalleProfs,Sinfo,UFA,s102,s103,s104,s105,s106,s107,s108,s109,s110,s111,s112,s113-SVT,s114,s115-SPH,s116,s117,s200,s201,s202,s203,s204,s205,s206,s207,s208,s209,s210,s211,s212,s213,s214,s215,s216,s217,s218,s219,s220,s221,s222,s223,s224,s225,s301,s302,s303,s304,s305,s306,s307,s308,s309,s310,s311,s312,s313,s314,s315,s316,s317,s318,s319,s320,s321,s322,s323,s324
[AssSocial]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[CDI-s10]
Roles=Prof,Eleve
MaxPostes=10
[CDI-s20]
Roles=Prof,Eleve
MaxPostes=20
[DDFPT]
Roles=Prof,Eleve
MaxPostes=10
[EIP]
Roles=Eleve
MaxPostes=30
[OrdiPortables]
Roles=Eleve
MaxPostes=5
[R2]
Roles=Eleve
MaxPostes=30
[SI]
Roles=Eleve
MaxPostes=30
[SalleDesSports]
Roles=Prof,Eleve
MaxPostes=10
[SalleProfs]
Roles=Prof,Eleve
MaxPostes=30
[Sinfo]
Roles=Eleve
MaxPostes=30
[UFA]
Roles=Eleve
MaxPostes=30
[s102]
Roles=Eleve
MaxPostes=30
[s103]
Roles=Eleve
MaxPostes=30
[s104]
Roles=Eleve
MaxPostes=30
[s105]
Roles=Eleve
MaxPostes=30
[s106]
Roles=Eleve
MaxPostes=30
[s107]
Roles=Eleve
MaxPostes=30
[s108]
Roles=Eleve
MaxPostes=30
[s109]
Roles=Eleve
MaxPostes=30
[s110]
Roles=Eleve
MaxPostes=30
[s111]
Roles=Eleve
MaxPostes=30
[s112]
Roles=Eleve
MaxPostes=30
[s113-SVT]
Roles=Eleve
MaxPostes=30
[s114]
Roles=Eleve
MaxPostes=30
[s115-SPH]
Roles=Eleve
MaxPostes=30
[s116]
Roles=Eleve
MaxPostes=30
[s117]
Roles=Eleve
MaxPostes=30
[s200]
Roles=Eleve
MaxPostes=30
[s201]
Roles=Eleve
MaxPostes=30
[s202]
Roles=Eleve
MaxPostes=30
[s203]
Roles=Eleve
MaxPostes=30
[s204]
Roles=Eleve
MaxPostes=30
[s205]
Roles=Eleve
MaxPostes=30
[s206]
Roles=Eleve
MaxPostes=30
[s207]
Roles=Eleve
MaxPostes=30
[s208]
Roles=Eleve
MaxPostes=30
[s209]
Roles=Eleve
MaxPostes=30
[s210]
Roles=Eleve
MaxPostes=30
[s211]
Roles=Eleve
MaxPostes=30
[s212]
Roles=Eleve
MaxPostes=30
[s213]
Roles=Eleve
MaxPostes=30
[s214]
Roles=Eleve
MaxPostes=30
[s215]
Roles=Eleve
MaxPostes=30
[s216]
Roles=Eleve
MaxPostes=30
[s217]
Roles=Eleve
MaxPostes=30
[s218]
Roles=Eleve
MaxPostes=30
[s219]
Roles=Eleve
MaxPostes=30
[s220]
Roles=Eleve
MaxPostes=30
[s221]
Roles=Eleve
MaxPostes=30
[s222]
Roles=Eleve
MaxPostes=30
[s223]
Roles=Eleve
MaxPostes=30
[s224]
Roles=Eleve
MaxPostes=30
[s225]
Roles=Eleve
MaxPostes=30
[s301]
Roles=Eleve
MaxPostes=30
[s302]
Roles=Eleve
MaxPostes=30
[s303]
Roles=Eleve
MaxPostes=30
[s304]
Roles=Eleve
MaxPostes=30
[s305]
Roles=Eleve
MaxPostes=30
[s306]
Roles=Eleve
MaxPostes=30
[s307]
Roles=Eleve
MaxPostes=30
[s308]
Roles=Eleve
MaxPostes=30
[s309]
Roles=Eleve
MaxPostes=30
[s310]
Roles=Eleve
MaxPostes=30
[s311]
Roles=Eleve
MaxPostes=30
[s312]
Roles=Eleve
MaxPostes=30
[s313]
Roles=Eleve
MaxPostes=30
[s314]
Roles=Eleve
MaxPostes=30
[s315]
Roles=Eleve
MaxPostes=30
[s316]
Roles=Eleve
MaxPostes=30
[s317]
Roles=Eleve
MaxPostes=30
[s318]
Roles=Eleve
MaxPostes=30
[s319]
Roles=Eleve
MaxPostes=30
[s320]
Roles=Eleve
MaxPostes=30
[s321]
Roles=Eleve
MaxPostes=30
[s322]
Roles=Eleve
MaxPostes=30
[s323]
Roles=Eleve
MaxPostes=30
[s324]
Roles=Eleve
MaxPostes=30
```
[Default]
Salles=AssSocial,CDI,CDI-s10,CDI-s20,DDFPT,EIP,OrdiPortables,R2,SI,SalleDesSports,SalleProfs,Sinfo,UFA,s102,s103,s104,s105,s106,s107,s108,s109,s110,s111,s112,s113-SVT,s114,s115-SPH,s116,s117,s200,s201,s202,s203,s204,s205,s206,s207,s208,s209,s210,s211,s212,s213,s214,s215,s216,s217,s218,s219,s220,s221,s222,s223,s224,s225,s301,s302,s303,s304,s305,s306,s307,s308,s309,s310,s311,s312,s313,s314,s315,s316,s317,s318,s319,s320,s321,s322,s323,s324
[AssSocial]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[CDI-s10]
Roles=Prof,Eleve
MaxPostes=10
[CDI-s20]
Roles=Prof,Eleve
MaxPostes=20
[DDFPT]
Roles=Prof,Eleve
MaxPostes=10
[EIP]
Roles=Eleve
MaxPostes=30
[OrdiPortables]
Roles=Eleve
MaxPostes=5
[R2]
Roles=Eleve
MaxPostes=30
[SI]
Roles=Eleve
MaxPostes=30
[SalleDesSports]
Roles=Prof,Eleve
MaxPostes=10
[SalleProfs]
Roles=Prof,Eleve
MaxPostes=30
[Sinfo]
Roles=Eleve
MaxPostes=30
[UFA]
Roles=Eleve
MaxPostes=30
[s102]
Roles=Eleve
MaxPostes=30
[s103]
Roles=Eleve
MaxPostes=30
[s104]
Roles=Eleve
MaxPostes=30
[s105]
Roles=Eleve
MaxPostes=30
[s106]
Roles=Eleve
MaxPostes=30
[s107]
Roles=Eleve
MaxPostes=30
[s108]
Roles=Eleve
MaxPostes=30
[s109]
Roles=Eleve
MaxPostes=30
[s110]
Roles=Eleve
MaxPostes=30
[s111]
Roles=Eleve
MaxPostes=30
[s112]
Roles=Eleve
MaxPostes=30
[s113-SVT]
Roles=Eleve
MaxPostes=30
[s114]
Roles=Eleve
MaxPostes=30
[s115-SPH]
Roles=Eleve
MaxPostes=30
[s116]
Roles=Eleve
MaxPostes=30
[s117]
Roles=Eleve
MaxPostes=30
[s200]
Roles=Eleve
MaxPostes=30
[s201]
Roles=Eleve
MaxPostes=30
[s202]
Roles=Eleve
MaxPostes=30
[s203]
Roles=Eleve
MaxPostes=30
[s204]
Roles=Eleve
MaxPostes=30
[s205]
Roles=Eleve
MaxPostes=30
[s206]
Roles=Eleve
MaxPostes=30
[s207]
Roles=Eleve
MaxPostes=30
[s208]
Roles=Eleve
MaxPostes=30
[s209]
Roles=Eleve
MaxPostes=30
[s210]
Roles=Eleve
MaxPostes=30
[s211]
Roles=Eleve
MaxPostes=30
[s212]
Roles=Eleve
MaxPostes=30
[s213]
Roles=Eleve
MaxPostes=30
[s214]
Roles=Eleve
MaxPostes=30
[s215]
Roles=Eleve
MaxPostes=30
[s216]
Roles=Eleve
MaxPostes=30
[s217]
Roles=Eleve
MaxPostes=30
[s218]
Roles=Eleve
MaxPostes=30
[s219]
Roles=Eleve
MaxPostes=30
[s220]
Roles=Eleve
MaxPostes=30
[s221]
Roles=Eleve
MaxPostes=30
[s222]
Roles=Eleve
MaxPostes=30
[s223]
Roles=Eleve
MaxPostes=30
[s224]
Roles=Eleve
MaxPostes=30
[s225]
Roles=Eleve
MaxPostes=30
[s301]
Roles=Eleve
MaxPostes=30
[s302]
Roles=Eleve
MaxPostes=30
[s303]
Roles=Eleve
MaxPostes=30
[s304]
Roles=Eleve
MaxPostes=30
[s305]
Roles=Eleve
MaxPostes=30
[s306]
Roles=Eleve
MaxPostes=30
[s307]
Roles=Eleve
MaxPostes=30
[s308]
Roles=Eleve
MaxPostes=30
[s309]
Roles=Eleve
MaxPostes=30
[s310]
Roles=Eleve
MaxPostes=30
[s311]
Roles=Eleve
MaxPostes=30
[s312]
Roles=Eleve
MaxPostes=30
[s313]
Roles=Eleve
MaxPostes=30
[s314]
Roles=Eleve
MaxPostes=30
[s315]
Roles=Eleve
MaxPostes=30
[s316]
Roles=Eleve
MaxPostes=30
[s317]
Roles=Eleve
MaxPostes=30
[s318]
Roles=Eleve
MaxPostes=30
[s319]
Roles=Eleve
MaxPostes=30
[s320]
Roles=Eleve
MaxPostes=30
[s321]
Roles=Eleve
MaxPostes=30
[s322]
Roles=Eleve
MaxPostes=30
[s323]
Roles=Eleve
MaxPostes=30
[s324]
Roles=Eleve
MaxPostes=30
+310
View File
@@ -0,0 +1,310 @@
[Default]
Salles=Agora_010,Agora_012,Agora_013,Agora_Agent-Chef,Agora_SDP,BatA_001,BatA_002,BatA_003,BatA_004,BatA_005,BatA_007,BatA_021,BatA_022,BatA_023,BatA_024,BatA_025,BatA_026,BatA_031,BatA_032,BatA_033,BatA_034,BatA_035,BatA_036,BatA_Magasin-Materiel,BatA_Réunion,BatB_006,BatB_007,BatB_010,BatB_011,BatB_012,BatB_013,BatB_014,BatB_015,BatB_016,BatB_017,BatB_018,BatB_020,BatB_021,BatB_022,BatB_024,BatB_026,BatB_CDI,BatB_Local-Agents,BatB_Reunion1,BatB_Reunion2,BatC_001,BatC_002,BatC_003,BatC_004,BatC_005-Assistante-Sociale,BatC_005-Infirmerie,BatC_005-MedecinDuTrvail,BatC_007,BatC_Atelier-Elec,BatC_EIP,BatD_011,BatD_012,BatD_021,BatD_022,BatD_023,BatD_031,BatD_Magasin-Pedagogique,BatE_011,BatE_012,BatE_014,BatE_017,BatE_021,BatE_022,BatE_023,BatE_024,BatE_026,BatE_Atelier-TMELEC,BatE_DemiPension,BatE_EIP,BatE_Loge,Inconnus_Chaufferie,Inconnus_MGP
[Agora_010]
Roles=Eleve
MaxPostes=30
[Agora_012]
Roles=Eleve
MaxPostes=30
[Agora_013]
Roles=Eleve
MaxPostes=30
[Agora_Agent-Chef]
Roles=Eleve
MaxPostes=30
[Agora_SDP]
Roles=Prof,Eleve
MaxPostes=30
[BatA_001]
Roles=Eleve
MaxPostes=30
[BatA_002]
Roles=Eleve
MaxPostes=30
[BatA_003]
Roles=Eleve
MaxPostes=30
[BatA_004]
Roles=Eleve
MaxPostes=30
[BatA_005]
Roles=Eleve
MaxPostes=30
[BatA_007]
Roles=Eleve
MaxPostes=30
[BatA_021]
Roles=Eleve
MaxPostes=30
[BatA_022]
Roles=Eleve
MaxPostes=30
[BatA_023]
Roles=Eleve
MaxPostes=30
[BatA_024]
Roles=Eleve
MaxPostes=30
[BatA_025]
Roles=Eleve
MaxPostes=30
[BatA_026]
Roles=Eleve
MaxPostes=30
[BatA_031]
Roles=Eleve
MaxPostes=30
[BatA_032]
Roles=Eleve
MaxPostes=30
[BatA_033]
Roles=Eleve
MaxPostes=30
[BatA_034]
Roles=Eleve
MaxPostes=30
[BatA_035]
Roles=Eleve
MaxPostes=30
[BatA_036]
Roles=Eleve
MaxPostes=30
[BatA_Magasin-Materiel]
Roles=Eleve
MaxPostes=30
[BatA_Réunion]
Roles=Eleve
MaxPostes=30
[BatB_006]
Roles=Eleve
MaxPostes=30
[BatB_007]
Roles=Eleve
MaxPostes=30
[BatB_010]
Roles=Eleve
MaxPostes=30
[BatB_011]
Roles=Eleve
MaxPostes=30
[BatB_012]
Roles=Eleve
MaxPostes=30
[BatB_013]
Roles=Eleve
MaxPostes=30
[BatB_014]
Roles=Eleve
MaxPostes=30
[BatB_015]
Roles=Eleve
MaxPostes=30
[BatB_016]
Roles=Eleve
MaxPostes=30
[BatB_017]
Roles=Eleve
MaxPostes=30
[BatB_018]
Roles=Eleve
MaxPostes=30
[BatB_020]
Roles=Eleve
MaxPostes=30
[BatB_021]
Roles=Eleve
MaxPostes=30
[BatB_022]
Roles=Eleve
MaxPostes=30
[BatB_024]
Roles=Eleve
MaxPostes=30
[BatB_026]
Roles=Eleve
MaxPostes=30
[BatB_CDI]
Roles=Prof,Eleve
MaxPostes=20
[BatB_Local-Agents]
Roles=Eleve
MaxPostes=30
[BatB_Reunion1]
Roles=Eleve
MaxPostes=30
[BatB_Reunion2]
Roles=Eleve
MaxPostes=30
[BatC_001]
Roles=Eleve
MaxPostes=30
[BatC_002]
Roles=Eleve
MaxPostes=30
[BatC_003]
Roles=Eleve
MaxPostes=30
[BatC_004]
Roles=Eleve
MaxPostes=30
[BatC_005-Assistante-Sociale]
Roles=Eleve
MaxPostes=30
[BatC_005-Infirmerie]
Roles=Eleve
MaxPostes=30
[BatC_005-MedecinDuTrvail]
Roles=Eleve
MaxPostes=30
[BatC_007]
Roles=Eleve
MaxPostes=30
[BatC_Atelier-Elec]
Roles=Eleve
MaxPostes=30
[BatC_EIP]
Roles=Eleve
MaxPostes=30
[BatD_011]
Roles=Eleve
MaxPostes=30
[BatD_012]
Roles=Eleve
MaxPostes=30
[BatD_021]
Roles=Eleve
MaxPostes=30
[BatD_022]
Roles=Eleve
MaxPostes=30
[BatD_023]
Roles=Eleve
MaxPostes=30
[BatD_031]
Roles=Eleve
MaxPostes=30
[BatD_Magasin-Pedagogique]
Roles=Eleve
MaxPostes=30
[BatE_011]
Roles=Eleve
MaxPostes=30
[BatE_012]
Roles=Eleve
MaxPostes=30
[BatE_014]
Roles=Eleve
MaxPostes=30
[BatE_017]
Roles=Eleve
MaxPostes=30
[BatE_021]
Roles=Eleve
MaxPostes=30
[BatE_022]
Roles=Eleve
MaxPostes=30
[BatE_023]
Roles=Eleve
MaxPostes=30
[BatE_024]
Roles=Eleve
MaxPostes=30
[BatE_026]
Roles=Eleve
MaxPostes=30
[BatE_Atelier-TMELEC]
Roles=Eleve
MaxPostes=30
[BatE_DemiPension]
Roles=Eleve
MaxPostes=30
[BatE_EIP]
Roles=Eleve
MaxPostes=30
[BatE_Loge]
Roles=Prof,Eleve
MaxPostes=2
[Inconnus_Chaufferie]
Roles=Eleve
MaxPostes=30
[Inconnus_MGP]
Roles=Eleve
MaxPostes=30
+186
View File
@@ -0,0 +1,186 @@
[Default]
Salles=000,003,004,007,008,009,011,012,013,020,021,022,024,025,026,028,100,101,102,103,104,105,106,107,108,109,110,111,112,113,116,117,118,119,120,121,122,CDI,DemiPension,Hall,Loge,Magasin,Manager,Reunion,SDP,TICE
[000]
Roles=Eleve
MaxPostes=30
[003]
Roles=Eleve
MaxPostes=30
[004]
Roles=Eleve
MaxPostes=30
[007]
Roles=Eleve
MaxPostes=30
[008]
Roles=Eleve
MaxPostes=30
[009]
Roles=Eleve
MaxPostes=30
[011]
Roles=Eleve
MaxPostes=30
[012]
Roles=Eleve
MaxPostes=30
[013]
Roles=Eleve
MaxPostes=30
[020]
Roles=Eleve
MaxPostes=30
[021]
Roles=Eleve
MaxPostes=30
[022]
Roles=Eleve
MaxPostes=30
[024]
Roles=Eleve
MaxPostes=30
[025]
Roles=Eleve
MaxPostes=30
[026]
Roles=Eleve
MaxPostes=30
[028]
Roles=Eleve
MaxPostes=30
[100]
Roles=Eleve
MaxPostes=30
[101]
Roles=Eleve
MaxPostes=30
[102]
Roles=Eleve
MaxPostes=30
[103]
Roles=Eleve
MaxPostes=30
[104]
Roles=Eleve
MaxPostes=30
[105]
Roles=Eleve
MaxPostes=30
[106]
Roles=Eleve
MaxPostes=30
[107]
Roles=Eleve
MaxPostes=30
[108]
Roles=Eleve
MaxPostes=30
[109]
Roles=Eleve
MaxPostes=30
[110]
Roles=Eleve
MaxPostes=30
[111]
Roles=Eleve
MaxPostes=30
[112]
Roles=Eleve
MaxPostes=30
[113]
Roles=Eleve
MaxPostes=30
[116]
Roles=Eleve
MaxPostes=30
[117]
Roles=Eleve
MaxPostes=30
[118]
Roles=Eleve
MaxPostes=30
[119]
Roles=Eleve
MaxPostes=30
[120]
Roles=Eleve
MaxPostes=30
[121]
Roles=Eleve
MaxPostes=30
[122]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[DemiPension]
Roles=Eleve
MaxPostes=30
[Hall]
Roles=Eleve
MaxPostes=30
[Loge]
Roles=Prof,Eleve
MaxPostes=2
[Magasin]
Roles=Eleve
MaxPostes=30
[Manager]
Roles=Eleve
MaxPostes=30
[Reunion]
Roles=Eleve
MaxPostes=30
[SDP]
Roles=Prof,Eleve
MaxPostes=30
[TICE]
Roles=Prof,Eleve
MaxPostes=10
+174
View File
@@ -0,0 +1,174 @@
[Default]
Salles=AED,Atelier-BMA,Atelier-Dentaire,Atelier-Serigraphie,Atelier-Signalitique,Atelier-Verre,Bureau-Tice,CDI,CV01,CV02,CV03,Match_Siences,SDG,SDP,SDT,SDT01,SDT02,124,125,126,127,129,130,131,132,137,138,148,149,201,202,203,208,210,211,212,213,214,215,216,217,219,220
[AED]
Roles=Eleve
MaxPostes=30
[Atelier-BMA]
Roles=Eleve
MaxPostes=30
[Atelier-Dentaire]
Roles=Eleve
MaxPostes=30
[Atelier-Serigraphie]
Roles=Eleve
MaxPostes=30
[Atelier-Signalitique]
Roles=Eleve
MaxPostes=30
[Atelier-Verre]
Roles=Eleve
MaxPostes=30
[Bureau-Tice]
Roles=Prof,Eleve
MaxPostes=10
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[CV01]
Roles=Eleve
MaxPostes=30
[CV02]
Roles=Eleve
MaxPostes=30
[CV03]
Roles=Eleve
MaxPostes=30
[Match_Siences]
Roles=Eleve
MaxPostes=30
[SDG]
Roles=Eleve
MaxPostes=30
[SDP]
Roles=Prof,Eleve
MaxPostes=30
[SDT]
Roles=Eleve
MaxPostes=30
[SDT01]
Roles=Eleve
MaxPostes=30
[SDT02]
Roles=Eleve
MaxPostes=30
[124]
Roles=Eleve
MaxPostes=30
[125]
Roles=Eleve
MaxPostes=30
[126]
Roles=Eleve
MaxPostes=30
[127]
Roles=Eleve
MaxPostes=30
[129]
Roles=Eleve
MaxPostes=30
[130]
Roles=Eleve
MaxPostes=30
[131]
Roles=Eleve
MaxPostes=30
[132]
Roles=Eleve
MaxPostes=30
[137]
Roles=Eleve
MaxPostes=30
[138]
Roles=Eleve
MaxPostes=30
[148]
Roles=Eleve
MaxPostes=30
[149]
Roles=Eleve
MaxPostes=30
[201]
Roles=Eleve
MaxPostes=30
[202]
Roles=Eleve
MaxPostes=30
[203]
Roles=Eleve
MaxPostes=30
[208]
Roles=Eleve
MaxPostes=30
[210]
Roles=Eleve
MaxPostes=30
[211]
Roles=Eleve
MaxPostes=30
[212]
Roles=Eleve
MaxPostes=30
[213]
Roles=Eleve
MaxPostes=30
[214]
Roles=Eleve
MaxPostes=30
[215]
Roles=Eleve
MaxPostes=30
[216]
Roles=Eleve
MaxPostes=30
[217]
Roles=Eleve
MaxPostes=30
[219]
Roles=Eleve
MaxPostes=30
[220]
Roles=Eleve
MaxPostes=30
+741
View File
@@ -0,0 +1,741 @@
```python
# Let's break down the rooms from the two screenshots to reconstruct them correctly based on prefix guidelines.
# Screenshot 1 (089-gambetta.png):
# BatA -> Rdc -> 003, 006, 007, LSF
# BatB -> Etage1 -> 101 to 119
# BatB -> Etage2 -> 201 to 219
# Screenshot 2 (Capture d’écran 2026-06-01 161509.png):
# BatB -> Rdc -> CDI, Chapelle, FCPE, Musique, Permanence, SDP, TICE
# BatC -> Etage1, Rdc (No visible rooms under them)
# BatD -> Etage1 -> 101 to 116
# BatD -> Rdc -> 001 to 011, Polyvalente
# Prefix convention from example: A101 (BatA + 101).
# Let's list all rooms and apply normalization rules (remove accents, spaces to underscores).
# Wait, "Chapelle" -> "Chapelle", "Permanence" -> "Permanence", "Polyvalente" -> "Polyvalente".
# Let's build the list of rooms precisely.
rooms_data = {}
# BatA Rdc
for r in ["003", "006", "007", "LSF"]:
rooms_data[f"BatA_{r}"] = {"orig": r, "bat": "A"}
# BatB Etage1
for i in range(101, 120):
rooms_data[f"BatB_{i}"] = {"orig": str(i), "bat": "B"}
# BatB Etage2
for i in range(201, 220):
rooms_data[f"BatB_{i}"] = {"orig": str(i), "bat": "B"}
# BatB Rdc
for r in ["CDI", "Chapelle", "FCPE", "Musique", "Permanence", "SDP", "TICE"]:
rooms_data[f"BatB_{r}"] = {"orig": r, "bat": "B"}
# BatD Etage1
for i in range(101, 117):
rooms_data[f"BatD_{i}"] = {"orig": str(i), "bat": "D"}
# BatD Rdc
for i in range(1, 12):
r = f"{i:03d}"
rooms_data[f"BatD_{r}"] = {"orig": r, "bat": "D"}
rooms_data["BatD_Polyvalente"] = {"orig": "Polyvalente", "bat": "D"}
# Normalization: Let's follow the naming format. The example showed "A101" for BatA + 101.
# So "BatA" + "003" -> "A003". "BatB" + "CDI" -> "B_CDI" or "BCDI"?
# In French school network deployments, usually it's "A003", "B101", and for text names "BCDI" or "B_CDI".
# Let's check rule 4: "A102 ITEC → A102_ITEC". This implies prefix is just letter + room code.
# Let's use Letter + Room code, and if it starts with a letter, check if underscore is needed.
# Let's look closely at standard convention: "A003", "ALSF" or "A_LSF"? Usually "A_LSF", "B_CDI", "B_Chapelle".
# Let's do: if the room code starts with a digit, concatenate (e.g. A003, B101). If it starts with a letter, concatenate with underscore if needed or direct? Let's use direct if it's clear, or underscore. Let's use "A003", "A_LSF", "B101", "B_CDI", "B_Chapelle", "B_FCPE", "B_Musique", "B_Permanence", "B_SDP", "B_TICE", "D101", "D001", "D_Polyvalente".
# Wait, "Conserver accents supprimés" means remove accents ("é" -> "e", etc.). "Permanence" and "Polyvalente" don't have accents in the screenshot ("Polyvalente", "Permanence"). "Chapelle" has no accents. "Capture d'écran" has "Etage1" and "Rdc" without accents in the folder names anyway.
# Let's refine the final keys:
final_rooms = {}
for k, v in rooms_data.items():
orig = v["orig"]
bat = v["bat"]
if orig.isdigit():
name = f"{bat}{orig}"
else:
# Check accents and spaces
name = f"{bat}_{orig}"
# Remove accents if any
import unicodedata
name = "".join(c for c in unicodedata.normalize('NFD', name) if unicodedata.category(c) != 'Mn')
name = name.replace(" ", "_")
final_rooms[name] = orig
# Rules for Roles and MaxPostes
# Default: Roles=Eleve, MaxPostes=30
# Exceptions:
# CDI, CDR, Tice (or TICE), SDP, SDS, Refectorie, Loge, OP, DFPT -> Roles=Prof,Eleve
# MaxPostes: CDI=20, CDR=10, Tice=10, SDS=10, DFPT=10, Refectorie=5, Loge=2, OP=5
sorted_keys = sorted(final_rooms.keys())
ini_lines = ["[Default]", f"Salles={','.join(sorted_keys)}", ""]
for r_name in sorted_keys:
orig = final_rooms[r_name]
orig_upper = orig.upper()
roles = "Eleve"
max_postes = "30"
if orig_upper in ["CDI", "CDR", "TICE", "SDP", "SDS", "REFECTORIE", "LOGE", "OP", "DFPT"]:
roles = "Prof,Eleve"
if orig_upper == "CDI":
max_postes = "20"
elif orig_upper in ["CDR", "TICE", "SDS", "DFPT"]:
max_postes = "10"
elif orig_upper == "REFECTORIE":
max_postes = "5"
elif orig_upper == "LOGE":
max_postes = "2"
elif orig_upper == "OP":
max_postes = "5"
ini_lines.append(f"[{r_name}]")
ini_lines.append(f"Roles={roles}")
ini_lines.append(f"MaxPostes={max_postes}")
ini_lines.append("")
ini_content = "\n".join(ini_lines).strip()
print(ini_content)
with open("salles.ini", "w", encoding="utf-8") as f:
f.write(ini_content)
```
```text
[Default]
Salles=A003,A006,A007,A_LSF,B101,B102,B103,B104,B105,B106,B107,B108,B109,B110,B111,B112,B113,B114,B115,B116,B117,B118,B119,B201,B202,B203,B204,B205,B206,B207,B208,B209,B210,B211,B212,B213,B214,B215,B216,B217,B218,B219,B_CDI,B_Chapelle,B_FCPE,B_Musique,B_Permanence,B_SDP,B_TICE,D001,D002,D003,D004,D005,D006,D007,D008,D009,D010,D011,D101,D102,D103,D104,D105,D106,D107,D108,D109,D110,D111,D112,D113,D114,D115,D116,D_Polyvalente
[A003]
Roles=Eleve
MaxPostes=30
[A006]
Roles=Eleve
MaxPostes=30
[A007]
Roles=Eleve
MaxPostes=30
[A_LSF]
Roles=Eleve
MaxPostes=30
[B101]
Roles=Eleve
MaxPostes=30
[B102]
Roles=Eleve
MaxPostes=30
[B103]
Roles=Eleve
MaxPostes=30
[B104]
Roles=Eleve
MaxPostes=30
[B105]
Roles=Eleve
MaxPostes=30
[B106]
Roles=Eleve
MaxPostes=30
[B107]
Roles=Eleve
MaxPostes=30
[B108]
Roles=Eleve
MaxPostes=30
[B109]
Roles=Eleve
MaxPostes=30
[B110]
Roles=Eleve
MaxPostes=30
[B111]
Roles=Eleve
MaxPostes=30
[B112]
Roles=Eleve
MaxPostes=30
[B113]
Roles=Eleve
MaxPostes=30
[B114]
Roles=Eleve
MaxPostes=30
[B115]
Roles=Eleve
MaxPostes=30
[B116]
Roles=Eleve
MaxPostes=30
[B117]
Roles=Eleve
MaxPostes=30
[B118]
Roles=Eleve
MaxPostes=30
[B119]
Roles=Eleve
MaxPostes=30
[B201]
Roles=Eleve
MaxPostes=30
[B202]
Roles=Eleve
MaxPostes=30
[B203]
Roles=Eleve
MaxPostes=30
[B204]
Roles=Eleve
MaxPostes=30
[B205]
Roles=Eleve
MaxPostes=30
[B206]
Roles=Eleve
MaxPostes=30
[B207]
Roles=Eleve
MaxPostes=30
[B208]
Roles=Eleve
MaxPostes=30
[B209]
Roles=Eleve
MaxPostes=30
[B210]
Roles=Eleve
MaxPostes=30
[B211]
Roles=Eleve
MaxPostes=30
[B212]
Roles=Eleve
MaxPostes=30
[B213]
Roles=Eleve
MaxPostes=30
[B214]
Roles=Eleve
MaxPostes=30
[B215]
Roles=Eleve
MaxPostes=30
[B216]
Roles=Eleve
MaxPostes=30
[B217]
Roles=Eleve
MaxPostes=30
[B218]
Roles=Eleve
MaxPostes=30
[B219]
Roles=Eleve
MaxPostes=30
[B_CDI]
Roles=Prof,Eleve
MaxPostes=20
[B_Chapelle]
Roles=Eleve
MaxPostes=30
[B_FCPE]
Roles=Eleve
MaxPostes=30
[B_Musique]
Roles=Eleve
MaxPostes=30
[B_Permanence]
Roles=Eleve
MaxPostes=30
[B_SDP]
Roles=Prof,Eleve
MaxPostes=30
[B_TICE]
Roles=Prof,Eleve
MaxPostes=10
[D001]
Roles=Eleve
MaxPostes=30
[D002]
Roles=Eleve
MaxPostes=30
[D003]
Roles=Eleve
MaxPostes=30
[D004]
Roles=Eleve
MaxPostes=30
[D005]
Roles=Eleve
MaxPostes=30
[D006]
Roles=Eleve
MaxPostes=30
[D007]
Roles=Eleve
MaxPostes=30
[D008]
Roles=Eleve
MaxPostes=30
[D009]
Roles=Eleve
MaxPostes=30
[D010]
Roles=Eleve
MaxPostes=30
[D011]
Roles=Eleve
MaxPostes=30
[D101]
Roles=Eleve
MaxPostes=30
[D102]
Roles=Eleve
MaxPostes=30
[D103]
Roles=Eleve
MaxPostes=30
[D104]
Roles=Eleve
MaxPostes=30
[D105]
Roles=Eleve
MaxPostes=30
[D106]
Roles=Eleve
MaxPostes=30
[D107]
Roles=Eleve
MaxPostes=30
[D108]
Roles=Eleve
MaxPostes=30
[D109]
Roles=Eleve
MaxPostes=30
[D110]
Roles=Eleve
MaxPostes=30
[D111]
Roles=Eleve
MaxPostes=30
[D112]
Roles=Eleve
MaxPostes=30
[D113]
Roles=Eleve
MaxPostes=30
[D114]
Roles=Eleve
MaxPostes=30
[D115]
Roles=Eleve
MaxPostes=30
[D116]
Roles=Eleve
MaxPostes=30
[D_Polyvalente]
Roles=Eleve
MaxPostes=30
```
[Default]
Salles=A003,A006,A007,A_LSF,B101,B102,B103,B104,B105,B106,B107,B108,B109,B110,B111,B112,B113,B114,B115,B116,B117,B118,B119,B201,B202,B203,B204,B205,B206,B207,B208,B209,B210,B211,B212,B213,B214,B215,B216,B217,B218,B219,B_CDI,B_Chapelle,B_FCPE,B_Musique,B_Permanence,B_SDP,B_TICE,D001,D002,D003,D004,D005,D006,D007,D008,D009,D010,D011,D101,D102,D103,D104,D105,D106,D107,D108,D109,D110,D111,D112,D113,D114,D115,D116,D_Polyvalente
[A003]
Roles=Eleve
MaxPostes=30
[A006]
Roles=Eleve
MaxPostes=30
[A007]
Roles=Eleve
MaxPostes=30
[A_LSF]
Roles=Eleve
MaxPostes=30
[B101]
Roles=Eleve
MaxPostes=30
[B102]
Roles=Eleve
MaxPostes=30
[B103]
Roles=Eleve
MaxPostes=30
[B104]
Roles=Eleve
MaxPostes=30
[B105]
Roles=Eleve
MaxPostes=30
[B106]
Roles=Eleve
MaxPostes=30
[B107]
Roles=Eleve
MaxPostes=30
[B108]
Roles=Eleve
MaxPostes=30
[B109]
Roles=Eleve
MaxPostes=30
[B110]
Roles=Eleve
MaxPostes=30
[B111]
Roles=Eleve
MaxPostes=30
[B112]
Roles=Eleve
MaxPostes=30
[B113]
Roles=Eleve
MaxPostes=30
[B114]
Roles=Eleve
MaxPostes=30
[B115]
Roles=Eleve
MaxPostes=30
[B116]
Roles=Eleve
MaxPostes=30
[B117]
Roles=Eleve
MaxPostes=30
[B118]
Roles=Eleve
MaxPostes=30
[B119]
Roles=Eleve
MaxPostes=30
[B201]
Roles=Eleve
MaxPostes=30
[B202]
Roles=Eleve
MaxPostes=30
[B203]
Roles=Eleve
MaxPostes=30
[B204]
Roles=Eleve
MaxPostes=30
[B205]
Roles=Eleve
MaxPostes=30
[B206]
Roles=Eleve
MaxPostes=30
[B207]
Roles=Eleve
MaxPostes=30
[B208]
Roles=Eleve
MaxPostes=30
[B209]
Roles=Eleve
MaxPostes=30
[B210]
Roles=Eleve
MaxPostes=30
[B211]
Roles=Eleve
MaxPostes=30
[B212]
Roles=Eleve
MaxPostes=30
[B213]
Roles=Eleve
MaxPostes=30
[B214]
Roles=Eleve
MaxPostes=30
[B215]
Roles=Eleve
MaxPostes=30
[B216]
Roles=Eleve
MaxPostes=30
[B217]
Roles=Eleve
MaxPostes=30
[B218]
Roles=Eleve
MaxPostes=30
[B219]
Roles=Eleve
MaxPostes=30
[B_CDI]
Roles=Prof,Eleve
MaxPostes=20
[B_Chapelle]
Roles=Eleve
MaxPostes=30
[B_FCPE]
Roles=Eleve
MaxPostes=30
[B_Musique]
Roles=Eleve
MaxPostes=30
[B_Permanence]
Roles=Eleve
MaxPostes=30
[B_SDP]
Roles=Prof,Eleve
MaxPostes=30
[B_TICE]
Roles=Prof,Eleve
MaxPostes=10
[D001]
Roles=Eleve
MaxPostes=30
[D002]
Roles=Eleve
MaxPostes=30
[D003]
Roles=Eleve
MaxPostes=30
[D004]
Roles=Eleve
MaxPostes=30
[D005]
Roles=Eleve
MaxPostes=30
[D006]
Roles=Eleve
MaxPostes=30
[D007]
Roles=Eleve
MaxPostes=30
[D008]
Roles=Eleve
MaxPostes=30
[D009]
Roles=Eleve
MaxPostes=30
[D010]
Roles=Eleve
MaxPostes=30
[D011]
Roles=Eleve
MaxPostes=30
[D101]
Roles=Eleve
MaxPostes=30
[D102]
Roles=Eleve
MaxPostes=30
[D103]
Roles=Eleve
MaxPostes=30
[D104]
Roles=Eleve
MaxPostes=30
[D105]
Roles=Eleve
MaxPostes=30
[D106]
Roles=Eleve
MaxPostes=30
[D107]
Roles=Eleve
MaxPostes=30
[D108]
Roles=Eleve
MaxPostes=30
[D109]
Roles=Eleve
MaxPostes=30
[D110]
Roles=Eleve
MaxPostes=30
[D111]
Roles=Eleve
MaxPostes=30
[D112]
Roles=Eleve
MaxPostes=30
[D113]
Roles=Eleve
MaxPostes=30
[D114]
Roles=Eleve
MaxPostes=30
[D115]
Roles=Eleve
MaxPostes=30
[D116]
Roles=Eleve
MaxPostes=30
[D_Polyvalente]
Roles=Eleve
MaxPostes=30
+50
View File
@@ -0,0 +1,50 @@
[Default]
Salles=101,4S102,103,104,105,106,107,107b,108,109,110,111b
[101]
Roles=Eleve
MaxPostes=30
[4S102]
Roles=Prof
MaxPostes=11
[103]
Roles=Eleve
MaxPostes=30
[104]
Roles=Eleve
MaxPostes=30
[105]
Roles=Eleve
MaxPostes=30
[106]
Roles=Eleve
MaxPostes=30
[107]
Roles=Eleve
MaxPostes=30
[107b]
Roles=Eleve
MaxPostes=30
[108]
Roles=Eleve
MaxPostes=30
[109]
Roles=Eleve
MaxPostes=30
[110]
Roles=Eleve
MaxPostes=30
[111b]
Roles=Eleve
MaxPostes=30
+218
View File
@@ -0,0 +1,218 @@
[Default]
Salles=005,006,007,008,009,010,012,013,060,102,104,105,109,110,112,113,114,115,118,164,168,170,171,172,173,175,177,202,204,206,207,209,303,307,308,311,314,315,317,318,319,908,911,913,915,918,930,931,CDI,ChariotMobile01,ChariotMobile02,Plateau,Poste-Profs,SDS
[005]
Roles=Eleve
MaxPostes=30
[006]
Roles=Eleve
MaxPostes=30
[007]
Roles=Eleve
MaxPostes=30
[008]
Roles=Eleve
MaxPostes=30
[009]
Roles=Eleve
MaxPostes=30
[010]
Roles=Eleve
MaxPostes=30
[012]
Roles=Eleve
MaxPostes=30
[013]
Roles=Eleve
MaxPostes=30
[060]
Roles=Eleve
MaxPostes=30
[102]
Roles=Eleve
MaxPostes=30
[104]
Roles=Eleve
MaxPostes=30
[105]
Roles=Eleve
MaxPostes=30
[109]
Roles=Eleve
MaxPostes=30
[110]
Roles=Eleve
MaxPostes=30
[112]
Roles=Eleve
MaxPostes=30
[113]
Roles=Eleve
MaxPostes=30
[114]
Roles=Eleve
MaxPostes=30
[115]
Roles=Eleve
MaxPostes=30
[118]
Roles=Eleve
MaxPostes=30
[164]
Roles=Eleve
MaxPostes=30
[168]
Roles=Eleve
MaxPostes=30
[170]
Roles=Eleve
MaxPostes=30
[171]
Roles=Eleve
MaxPostes=30
[172]
Roles=Eleve
MaxPostes=30
[173]
Roles=Eleve
MaxPostes=30
[175]
Roles=Eleve
MaxPostes=30
[177]
Roles=Eleve
MaxPostes=30
[202]
Roles=Eleve
MaxPostes=30
[204]
Roles=Eleve
MaxPostes=30
[206]
Roles=Eleve
MaxPostes=30
[207]
Roles=Eleve
MaxPostes=30
[209]
Roles=Eleve
MaxPostes=30
[303]
Roles=Eleve
MaxPostes=30
[307]
Roles=Eleve
MaxPostes=30
[308]
Roles=Eleve
MaxPostes=30
[311]
Roles=Eleve
MaxPostes=30
[314]
Roles=Eleve
MaxPostes=30
[315]
Roles=Eleve
MaxPostes=30
[317]
Roles=Eleve
MaxPostes=30
[318]
Roles=Eleve
MaxPostes=30
[319]
Roles=Eleve
MaxPostes=30
[908]
Roles=Eleve
MaxPostes=30
[911]
Roles=Eleve
MaxPostes=30
[913]
Roles=Eleve
MaxPostes=30
[915]
Roles=Eleve
MaxPostes=30
[918]
Roles=Eleve
MaxPostes=30
[930]
Roles=Eleve
MaxPostes=30
[931]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[ChariotMobile01]
Roles=Eleve
MaxPostes=30
[ChariotMobile02]
Roles=Eleve
MaxPostes=30
[Plateau]
Roles=Eleve
MaxPostes=30
[Poste-Profs]
Roles=Eleve
MaxPostes=30
[SDS]
Roles=Prof,Eleve
MaxPostes=10
+354
View File
@@ -0,0 +1,354 @@
[Default]
Salles=A003,A004,A005,A006,A007,A008,A100,A101,A102,A103,A104,A105,A106,A107,A108,A109,A110,A111,A112,A113,A114,A115,A116,A117,A118,A202,A204,A206,A208,A209,A210,A211,A212,A213,A214,A215,A216,A300,A301,A302,A303,A304,A305,AAffichage,ABureau-informatique,ACDI,AEsperanza,ALaboAllemand,ALaboAnglais,ALaboEspagnol,ALaboFrancais,ALaboHistGeo,ALaboMath,ALaboPhilo,ARG,ASDP,ASDP-BTS,ASophrologie,B010,B119,B120,B121,B122,B124,B125,B126,B127,B128,B216,B217,B218,B219,B220,B221,B222,BAtel3D,BCoordAVS,BLaboChimie,BLaboPhys,BLaboSTMG,BLaboSVT1,BLaboSVT2,BMDL,BParentsEleves1,BParentsEleves2,BSDPPhysChim,BSDPSVT,BZazie,Portable_B222
[A003]
Roles=Eleve
MaxPostes=30
[A004]
Roles=Eleve
MaxPostes=30
[A005]
Roles=Eleve
MaxPostes=30
[A006]
Roles=Eleve
MaxPostes=30
[A007]
Roles=Eleve
MaxPostes=30
[A008]
Roles=Eleve
MaxPostes=30
[A100]
Roles=Eleve
MaxPostes=30
[A101]
Roles=Eleve
MaxPostes=30
[A102]
Roles=Eleve
MaxPostes=30
[A103]
Roles=Eleve
MaxPostes=30
[A104]
Roles=Eleve
MaxPostes=30
[A105]
Roles=Eleve
MaxPostes=30
[A106]
Roles=Eleve
MaxPostes=30
[A107]
Roles=Eleve
MaxPostes=30
[A108]
Roles=Eleve
MaxPostes=30
[A109]
Roles=Eleve
MaxPostes=30
[A110]
Roles=Eleve
MaxPostes=30
[A111]
Roles=Eleve
MaxPostes=30
[A112]
Roles=Eleve
MaxPostes=30
[A113]
Roles=Eleve
MaxPostes=30
[A114]
Roles=Eleve
MaxPostes=30
[A115]
Roles=Eleve
MaxPostes=30
[A116]
Roles=Eleve
MaxPostes=30
[A117]
Roles=Eleve
MaxPostes=30
[A118]
Roles=Eleve
MaxPostes=30
[A202]
Roles=Eleve
MaxPostes=30
[A204]
Roles=Eleve
MaxPostes=30
[A206]
Roles=Eleve
MaxPostes=30
[A208]
Roles=Eleve
MaxPostes=30
[A209]
Roles=Eleve
MaxPostes=30
[A210]
Roles=Eleve
MaxPostes=30
[A211]
Roles=Eleve
MaxPostes=30
[A212]
Roles=Eleve
MaxPostes=30
[A213]
Roles=Eleve
MaxPostes=30
[A214]
Roles=Eleve
MaxPostes=30
[A215]
Roles=Eleve
MaxPostes=30
[A216]
Roles=Eleve
MaxPostes=30
[A300]
Roles=Eleve
MaxPostes=30
[A301]
Roles=Eleve
MaxPostes=30
[A302]
Roles=Eleve
MaxPostes=30
[A303]
Roles=Eleve
MaxPostes=30
[A304]
Roles=Eleve
MaxPostes=30
[A305]
Roles=Eleve
MaxPostes=30
[AAffichage]
Roles=Eleve
MaxPostes=30
[ABureau-informatique]
Roles=Eleve
MaxPostes=30
[ACDI]
Roles=Prof,Eleve
MaxPostes=20
[AEsperanza]
Roles=Eleve
MaxPostes=30
[ALaboAllemand]
Roles=Eleve
MaxPostes=30
[ALaboAnglais]
Roles=Eleve
MaxPostes=30
[ALaboEspagnol]
Roles=Eleve
MaxPostes=30
[ALaboFrancais]
Roles=Eleve
MaxPostes=30
[ALaboHistGeo]
Roles=Eleve
MaxPostes=30
[ALaboMath]
Roles=Eleve
MaxPostes=30
[ALaboPhilo]
Roles=Eleve
MaxPostes=30
[ARG]
Roles=Eleve
MaxPostes=30
[ASDP]
Roles=Prof,Eleve
MaxPostes=30
[ASDP-BTS]
Roles=Prof,Eleve
MaxPostes=30
[ASophrologie]
Roles=Eleve
MaxPostes=30
[B010]
Roles=Eleve
MaxPostes=30
[B119]
Roles=Eleve
MaxPostes=30
[B120]
Roles=Eleve
MaxPostes=30
[B121]
Roles=Eleve
MaxPostes=30
[B122]
Roles=Eleve
MaxPostes=30
[B124]
Roles=Eleve
MaxPostes=30
[B125]
Roles=Eleve
MaxPostes=30
[B126]
Roles=Eleve
MaxPostes=30
[B127]
Roles=Eleve
MaxPostes=30
[B128]
Roles=Eleve
MaxPostes=30
[B216]
Roles=Eleve
MaxPostes=30
[B217]
Roles=Eleve
MaxPostes=30
[B218]
Roles=Eleve
MaxPostes=30
[B219]
Roles=Eleve
MaxPostes=30
[B220]
Roles=Eleve
MaxPostes=30
[B221]
Roles=Eleve
MaxPostes=30
[B222]
Roles=Eleve
MaxPostes=30
[BAtel3D]
Roles=Eleve
MaxPostes=30
[BCoordAVS]
Roles=Eleve
MaxPostes=30
[BLaboChimie]
Roles=Eleve
MaxPostes=30
[BLaboPhys]
Roles=Eleve
MaxPostes=30
[BLaboSTMG]
Roles=Eleve
MaxPostes=30
[BLaboSVT1]
Roles=Eleve
MaxPostes=30
[BLaboSVT2]
Roles=Eleve
MaxPostes=30
[BMDL]
Roles=Eleve
MaxPostes=30
[BParentsEleves1]
Roles=Eleve
MaxPostes=30
[BParentsEleves2]
Roles=Eleve
MaxPostes=30
[BSDPPhysChim]
Roles=Prof,Eleve
MaxPostes=30
[BSDPSVT]
Roles=Prof,Eleve
MaxPostes=30
[BZazie]
Roles=Eleve
MaxPostes=30
+54
View File
@@ -0,0 +1,54 @@
[Default]
Salles=E01,E05,E07,E11,EPS,GRETA,InfoB,InfoE,ProfB,ProfE,bleue,jaune,verte
[E01]
Roles=Eleve
MaxPostes=30
[E05]
Roles=Eleve
MaxPostes=30
[E07]
Roles=Eleve
MaxPostes=30
[E11]
Roles=Eleve
MaxPostes=30
[EPS]
Roles=Eleve
MaxPostes=30
[GRETA]
Roles=Eleve
MaxPostes=30
[InfoB]
Roles=Eleve
MaxPostes=30
[InfoE]
Roles=Eleve
MaxPostes=30
[ProfB]
Roles=Eleve
MaxPostes=30
[ProfE]
Roles=Eleve
MaxPostes=30
[bleue]
Roles=Eleve
MaxPostes=30
[jaune]
Roles=Eleve
MaxPostes=30
[verte]
Roles=Eleve
MaxPostes=30
+880
View File
@@ -0,0 +1,880 @@
```python
# Let's list all rooms found in the images.
# Image 1 contains:
# Top items (presumably Etage 1 but header is not shown, or just general list):
# a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a114, a116
# Then "Etage2":
# a201, a202, a203, a204, a205, a206, a207, a208, a209, a210, a211, a212, a214, a216
# Then "Etage3":
# a301, a302, a305, a306, a307, a310, a311, a316
# Then "RDC":
# Accueil, CDI, CIO, CPE, Informatique, Professeurs, SalleDesSport
# Then "Sous-Sol":
# Technologie1, Technologie2
# Image 2 contains:
# artsplast (at the very top)
# f101, f102, f103, f104, f105, f106, f107, f108, f109, f109bis, f110, f111, f112, f113, f114, f115, f116, f117, f118, f120, f121, f123, f124, f125, f127, f128, f129
# Then "Etage2":
# f211, f212, f213, f214, f215, f216, f217, f218
# Then "RDC":
# f001, f002, f003, f004, f005, f006, f007, f021, f022, f024, f025, f026, f027, f028
# Image 3 contains:
# Continuation of RDC or similar list:
# f028, f029, f030, f28bis, Foyer
rooms = [
# Image 1
"a101", "a102", "a103", "a104", "a105", "a106", "a107", "a108", "a109", "a111", "a114", "a116",
"a201", "a202", "a203", "a204", "a205", "a206", "a207", "a208", "a209", "a210", "a211", "a212", "a214", "a216",
"a301", "a302", "a305", "a306", "a307", "a310", "a311", "a316",
"Accueil", "CDI", "CIO", "CPE", "Informatique", "Professeurs", "SalleDesSport",
"Technologie1", "Technologie2",
# Image 2 & 3
"artsplast",
"f101", "f102", "f103", "f104", "f105", "f106", "f107", "f108", "f109", "f109bis", "f110", "f111", "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f120", "f121", "f123", "f124", "f125", "f127", "f128", "f129",
"f211", "f212", "f213", "f214", "f215", "f216", "f217", "f218",
"f001", "f002", "f003", "f004", "f005", "f006", "f007", "f021", "f022", "f024", "f025", "f026", "f027", "f028", "f029", "f030", "f28bis", "Foyer"
]
# Clean room names according to normalization rules (replace spaces with underscores, though here there are none except potentially case normalization if needed)
# Remove duplicates if any (f028 is present in both image 2 and 3)
rooms = list(set(rooms))
# Normalization: Let's make sure casing matches standard or keep original? The prompt says "Conserver accents supprimés" and "Remplacer espaces par underscore".
# Let's write a proper sorting function.
# Alphabetical then numerical sorting.
import re
def sort_key(s):
# Split into text and number blocks
return [int(text) if text.isdigit() else text.lower() for text in re.split(r'(\d+)', s)]
rooms.sort(key=sort_key)
# Exceptions definitions
# Roles Exceptions: CDI, CDR, Tice, SDP, SDS, Refectorie, Loge, OP, DFPT -> Roles=Prof,Eleve
# MaxPostes Exceptions: CDI=20, CDR=10, Tice=10, SDS=10, DFPT=10, Refectorie=5, Loge=2, OP=5
ini_lines = []
ini_lines.append("[Default]")
ini_lines.append(f"Salles={','.join(rooms)}")
ini_lines.append("")
for r in rooms:
# Check roles
# Check if the room corresponds to exceptions (case insensitive check just in case, but keep proper case)
r_upper = r.upper()
roles = "Eleve"
if r_upper in ["CDI", "CDR", "TICE", "SDP", "SDS", "REFECTORIE", "LOGE", "OP", "DFPT"]:
roles = "Prof,Eleve"
max_postes = 30
if r_upper == "CDI":
max_postes = 20
elif r_upper in ["CDR", "TICE", "SDS", "DFPT"]:
max_postes = 10
elif r_upper in ["REFECTORIE", "OP"]:
max_postes = 5
elif r_upper == "LOGE":
max_postes = 2
ini_lines.append(f"[{r}]")
ini_lines.append(f"Roles={roles}")
ini_lines.append(f"MaxPostes={max_postes}")
ini_lines.append("")
print("\n".join(ini_lines))
```
```text
[Default]
Salles=a101,a102,a103,a104,a105,a106,a107,a108,a109,a111,a114,a116,a201,a202,a203,a204,a205,a206,a207,a208,a209,a210,a211,a212,a214,a216,a301,a302,a305,a306,a307,a310,a311,a316,Accueil,artsplast,CDI,CIO,CPE,f001,f002,f003,f004,f005,f006,f007,f021,f022,f024,f025,f026,f027,f028,f28bis,f029,f030,f101,f102,f103,f104,f105,f106,f107,f108,f109,f109bis,f110,f111,f112,f113,f114,f115,f116,f117,f118,f120,f121,f123,f124,f125,f127,f128,f129,f211,f212,f213,f214,f215,f216,f217,f218,Foyer,Informatique,Professeurs,SalleDesSport,Technologie1,Technologie2
[a101]
Roles=Eleve
MaxPostes=30
[a102]
Roles=Eleve
MaxPostes=30
[a103]
Roles=Eleve
MaxPostes=30
[a104]
Roles=Eleve
MaxPostes=30
[a105]
Roles=Eleve
MaxPostes=30
[a106]
Roles=Eleve
MaxPostes=30
[a107]
Roles=Eleve
MaxPostes=30
[a108]
Roles=Eleve
MaxPostes=30
[a109]
Roles=Eleve
MaxPostes=30
[a111]
Roles=Eleve
MaxPostes=30
[a114]
Roles=Eleve
MaxPostes=30
[a116]
Roles=Eleve
MaxPostes=30
[a201]
Roles=Eleve
MaxPostes=30
[a202]
Roles=Eleve
MaxPostes=30
[a203]
Roles=Eleve
MaxPostes=30
[a204]
Roles=Eleve
MaxPostes=30
[a205]
Roles=Eleve
MaxPostes=30
[a206]
Roles=Eleve
MaxPostes=30
[a207]
Roles=Eleve
MaxPostes=30
[a208]
Roles=Eleve
MaxPostes=30
[a209]
Roles=Eleve
MaxPostes=30
[a210]
Roles=Eleve
MaxPostes=30
[a211]
Roles=Eleve
MaxPostes=30
[a212]
Roles=Eleve
MaxPostes=30
[a214]
Roles=Eleve
MaxPostes=30
[a216]
Roles=Eleve
MaxPostes=30
[a301]
Roles=Eleve
MaxPostes=30
[a302]
Roles=Eleve
MaxPostes=30
[a305]
Roles=Eleve
MaxPostes=30
[a306]
Roles=Eleve
MaxPostes=30
[a307]
Roles=Eleve
MaxPostes=30
[a310]
Roles=Eleve
MaxPostes=30
[a311]
Roles=Eleve
MaxPostes=30
[a316]
Roles=Eleve
MaxPostes=30
[Accueil]
Roles=Eleve
MaxPostes=30
[artsplast]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[CIO]
Roles=Eleve
MaxPostes=30
[CPE]
Roles=Eleve
MaxPostes=30
[f001]
Roles=Eleve
MaxPostes=30
[f002]
Roles=Eleve
MaxPostes=30
[f003]
Roles=Eleve
MaxPostes=30
[f004]
Roles=Eleve
MaxPostes=30
[f005]
Roles=Eleve
MaxPostes=30
[f006]
Roles=Eleve
MaxPostes=30
[f007]
Roles=Eleve
MaxPostes=30
[f021]
Roles=Eleve
MaxPostes=30
[f022]
Roles=Eleve
MaxPostes=30
[f024]
Roles=Eleve
MaxPostes=30
[f025]
Roles=Eleve
MaxPostes=30
[f026]
Roles=Eleve
MaxPostes=30
[f027]
Roles=Eleve
MaxPostes=30
[f028]
Roles=Eleve
MaxPostes=30
[f28bis]
Roles=Eleve
MaxPostes=30
[f029]
Roles=Eleve
MaxPostes=30
[f030]
Roles=Eleve
MaxPostes=30
[f101]
Roles=Eleve
MaxPostes=30
[f102]
Roles=Eleve
MaxPostes=30
[f103]
Roles=Eleve
MaxPostes=30
[f104]
Roles=Eleve
MaxPostes=30
[f105]
Roles=Eleve
MaxPostes=30
[f106]
Roles=Eleve
MaxPostes=30
[f107]
Roles=Eleve
MaxPostes=30
[f108]
Roles=Eleve
MaxPostes=30
[f109]
Roles=Eleve
MaxPostes=30
[f109bis]
Roles=Eleve
MaxPostes=30
[f110]
Roles=Eleve
MaxPostes=30
[f111]
Roles=Eleve
MaxPostes=30
[f112]
Roles=Eleve
MaxPostes=30
[f113]
Roles=Eleve
MaxPostes=30
[f114]
Roles=Eleve
MaxPostes=30
[f115]
Roles=Eleve
MaxPostes=30
[f116]
Roles=Eleve
MaxPostes=30
[f117]
Roles=Eleve
MaxPostes=30
[f118]
Roles=Eleve
MaxPostes=30
[f120]
Roles=Eleve
MaxPostes=30
[f121]
Roles=Eleve
MaxPostes=30
[f123]
Roles=Eleve
MaxPostes=30
[f124]
Roles=Eleve
MaxPostes=30
[f125]
Roles=Eleve
MaxPostes=30
[f127]
Roles=Eleve
MaxPostes=30
[f128]
Roles=Eleve
MaxPostes=30
[f129]
Roles=Eleve
MaxPostes=30
[f211]
Roles=Eleve
MaxPostes=30
[f212]
Roles=Eleve
MaxPostes=30
[f213]
Roles=Eleve
MaxPostes=30
[f214]
Roles=Eleve
MaxPostes=30
[f215]
Roles=Eleve
MaxPostes=30
[f216]
Roles=Eleve
MaxPostes=30
[f217]
Roles=Eleve
MaxPostes=30
[f218]
Roles=Eleve
MaxPostes=30
[Foyer]
Roles=Eleve
MaxPostes=30
[Informatique]
Roles=Eleve
MaxPostes=30
[Professeurs]
Roles=Eleve
MaxPostes=30
[SalleDesSport]
Roles=Eleve
MaxPostes=30
[Technologie1]
Roles=Eleve
MaxPostes=30
[Technologie2]
Roles=Eleve
MaxPostes=30
```
[Default]
Salles=a101,a102,a103,a104,a105,a106,a107,a108,a109,a111,a114,a116,a201,a202,a203,a204,a205,a206,a207,a208,a209,a210,a211,a212,a214,a216,a301,a302,a305,a306,a307,a310,a311,a316,Accueil,artsplast,CDI,CIO,CPE,f001,f002,f003,f004,f005,f006,f007,f021,f022,f024,f025,f026,f027,f028,f28bis,f029,f030,f101,f102,f103,f104,f105,f106,f107,f108,f109,f109bis,f110,f111,f112,f113,f114,f115,f116,f117,f118,f120,f121,f123,f124,f125,f127,f128,f129,f211,f212,f213,f214,f215,f216,f217,f218,Foyer,Informatique,Professeurs,SalleDesSport,Technologie1,Technologie2
[a101]
Roles=Eleve
MaxPostes=30
[a102]
Roles=Eleve
MaxPostes=30
[a103]
Roles=Eleve
MaxPostes=30
[a104]
Roles=Eleve
MaxPostes=30
[a105]
Roles=Eleve
MaxPostes=30
[a106]
Roles=Eleve
MaxPostes=30
[a107]
Roles=Eleve
MaxPostes=30
[a108]
Roles=Eleve
MaxPostes=30
[a109]
Roles=Eleve
MaxPostes=30
[a111]
Roles=Eleve
MaxPostes=30
[a114]
Roles=Eleve
MaxPostes=30
[a116]
Roles=Eleve
MaxPostes=30
[a201]
Roles=Eleve
MaxPostes=30
[a202]
Roles=Eleve
MaxPostes=30
[a203]
Roles=Eleve
MaxPostes=30
[a204]
Roles=Eleve
MaxPostes=30
[a205]
Roles=Eleve
MaxPostes=30
[a206]
Roles=Eleve
MaxPostes=30
[a207]
Roles=Eleve
MaxPostes=30
[a208]
Roles=Eleve
MaxPostes=30
[a209]
Roles=Eleve
MaxPostes=30
[a210]
Roles=Eleve
MaxPostes=30
[a211]
Roles=Eleve
MaxPostes=30
[a212]
Roles=Eleve
MaxPostes=30
[a214]
Roles=Eleve
MaxPostes=30
[a216]
Roles=Eleve
MaxPostes=30
[a301]
Roles=Eleve
MaxPostes=30
[a302]
Roles=Eleve
MaxPostes=30
[a305]
Roles=Eleve
MaxPostes=30
[a306]
Roles=Eleve
MaxPostes=30
[a307]
Roles=Eleve
MaxPostes=30
[a310]
Roles=Eleve
MaxPostes=30
[a311]
Roles=Eleve
MaxPostes=30
[a316]
Roles=Eleve
MaxPostes=30
[Accueil]
Roles=Eleve
MaxPostes=30
[artsplast]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[CIO]
Roles=Eleve
MaxPostes=30
[CPE]
Roles=Eleve
MaxPostes=30
[f001]
Roles=Eleve
MaxPostes=30
[f002]
Roles=Eleve
MaxPostes=30
[f003]
Roles=Eleve
MaxPostes=30
[f004]
Roles=Eleve
MaxPostes=30
[f005]
Roles=Eleve
MaxPostes=30
[f006]
Roles=Eleve
MaxPostes=30
[f007]
Roles=Eleve
MaxPostes=30
[f021]
Roles=Eleve
MaxPostes=30
[f022]
Roles=Eleve
MaxPostes=30
[f024]
Roles=Eleve
MaxPostes=30
[f025]
Roles=Eleve
MaxPostes=30
[f026]
Roles=Eleve
MaxPostes=30
[f027]
Roles=Eleve
MaxPostes=30
[f028]
Roles=Eleve
MaxPostes=30
[f28bis]
Roles=Eleve
MaxPostes=30
[f029]
Roles=Eleve
MaxPostes=30
[f030]
Roles=Eleve
MaxPostes=30
[f101]
Roles=Eleve
MaxPostes=30
[f102]
Roles=Eleve
MaxPostes=30
[f103]
Roles=Eleve
MaxPostes=30
[f104]
Roles=Eleve
MaxPostes=30
[f105]
Roles=Eleve
MaxPostes=30
[f106]
Roles=Eleve
MaxPostes=30
[f107]
Roles=Eleve
MaxPostes=30
[f108]
Roles=Eleve
MaxPostes=30
[f109]
Roles=Eleve
MaxPostes=30
[f109bis]
Roles=Eleve
MaxPostes=30
[f110]
Roles=Eleve
MaxPostes=30
[f111]
Roles=Eleve
MaxPostes=30
[f112]
Roles=Eleve
MaxPostes=30
[f113]
Roles=Eleve
MaxPostes=30
[f114]
Roles=Eleve
MaxPostes=30
[f115]
Roles=Eleve
MaxPostes=30
[f116]
Roles=Eleve
MaxPostes=30
[f117]
Roles=Eleve
MaxPostes=30
[f118]
Roles=Eleve
MaxPostes=30
[f120]
Roles=Eleve
MaxPostes=30
[f121]
Roles=Eleve
MaxPostes=30
[f123]
Roles=Eleve
MaxPostes=30
[f124]
Roles=Eleve
MaxPostes=30
[f125]
Roles=Eleve
MaxPostes=30
[f127]
Roles=Eleve
MaxPostes=30
[f128]
Roles=Eleve
MaxPostes=30
[f129]
Roles=Eleve
MaxPostes=30
[f211]
Roles=Eleve
MaxPostes=30
[f212]
Roles=Eleve
MaxPostes=30
[f213]
Roles=Eleve
MaxPostes=30
[f214]
Roles=Eleve
MaxPostes=30
[f215]
Roles=Eleve
MaxPostes=30
[f216]
Roles=Eleve
MaxPostes=30
[f217]
Roles=Eleve
MaxPostes=30
[f218]
Roles=Eleve
MaxPostes=30
[Foyer]
Roles=Eleve
MaxPostes=30
[Informatique]
Roles=Eleve
MaxPostes=30
[Professeurs]
Roles=Eleve
MaxPostes=30
[SalleDesSport]
Roles=Eleve
MaxPostes=30
[Technologie1]
Roles=Eleve
MaxPostes=30
[Technologie2]
Roles=Eleve
MaxPostes=30
+126
View File
@@ -0,0 +1,126 @@
[Default]
Salles=011,022,024,025,026,027,028,029,039,040,101,102,103,104,105,106,109,110,112,114,115,116,117,118,121,122,Atl-Citroen,Atl-PEUGEOT,Atl-Peugeot,Atl-Renault,Cdi
[011]
Roles=Eleve
MaxPostes=30
[022]
Roles=Eleve
MaxPostes=30
[024]
Roles=Eleve
MaxPostes=30
[025]
Roles=Eleve
MaxPostes=30
[026]
Roles=Eleve
MaxPostes=30
[027]
Roles=Eleve
MaxPostes=30
[028]
Roles=Eleve
MaxPostes=30
[029]
Roles=Eleve
MaxPostes=30
[039]
Roles=Eleve
MaxPostes=30
[040]
Roles=Eleve
MaxPostes=30
[101]
Roles=Eleve
MaxPostes=30
[102]
Roles=Eleve
MaxPostes=30
[103]
Roles=Eleve
MaxPostes=30
[104]
Roles=Eleve
MaxPostes=30
[105]
Roles=Eleve
MaxPostes=30
[106]
Roles=Eleve
MaxPostes=30
[109]
Roles=Eleve
MaxPostes=30
[110]
Roles=Eleve
MaxPostes=30
[112]
Roles=Eleve
MaxPostes=30
[114]
Roles=Eleve
MaxPostes=30
[115]
Roles=Eleve
MaxPostes=30
[116]
Roles=Eleve
MaxPostes=30
[117]
Roles=Eleve
MaxPostes=30
[118]
Roles=Eleve
MaxPostes=30
[121]
Roles=Eleve
MaxPostes=30
[122]
Roles=Eleve
MaxPostes=30
[Atl-Citroen]
Roles=Eleve
MaxPostes=30
[Atl-DS]
Roles=Eleve
MaxPostes=30
[Atl-Peugeot]
Roles=Eleve
MaxPostes=30
[Atl-Renault]
Roles=Eleve
MaxPostes=30
[Cdi]
Roles=Prof,Eleve
MaxPostes=20
+98
View File
@@ -0,0 +1,98 @@
[Default]
Salles=B0H12,B0H13,B0H21,B0H22,B0H23,B116,B121,B128,B130,B131,B133,B201,B202,B206,B208,B218,B402,C121,CDI,COH04,D102,D106,SDP
[Default]
Salles=B0H12,B0H13,B0H21,B0H22,B0H23,B116,B121,B128,B130,B131,B133,B201,B202,B206,B208,B218,B402,C121,CDI,COH04,D102,D106,SDP
[B0H12]
Roles=Eleve
MaxPostes=30
[B0H13]
Roles=Eleve
MaxPostes=30
[B0H21]
Roles=Eleve
MaxPostes=30
[B0H22]
Roles=Eleve
MaxPostes=30
[B0H23]
Roles=Eleve
MaxPostes=30
[B116]
Roles=Eleve
MaxPostes=30
[B121]
Roles=Eleve
MaxPostes=30
[B128]
Roles=Eleve
MaxPostes=30
[B130]
Roles=Eleve
MaxPostes=30
[B131]
Roles=Eleve
MaxPostes=30
[B133]
Roles=Eleve
MaxPostes=30
[B201]
Roles=Eleve
MaxPostes=30
[B202]
Roles=Eleve
MaxPostes=30
[B206]
Roles=Eleve
MaxPostes=30
[B208]
Roles=Eleve
MaxPostes=30
[B218]
Roles=Eleve
MaxPostes=30
[B402]
Roles=Eleve
MaxPostes=30
[C121]
Roles=Eleve
MaxPostes=30
[CDI]
Roles=Prof,Eleve
MaxPostes=20
[COH04]
Roles=Eleve
MaxPostes=30
[D102]
Roles=Eleve
MaxPostes=30
[D106]
Roles=Eleve
MaxPostes=30
[SDP]
Roles=Prof,Eleve
MaxPostes=30