Pomoc s VBS skriptem

...

Moderátor: Mods_senior

Odpovědět
wolfie
nováček
Příspěvky: 3
Registrován: 12 kvě 2022 22:48

Pomoc s VBS skriptem

Příspěvek od wolfie »

Ahojte,
našel by se někdo, kdo by mi , prosím pomohl upravit VBS skript, aby dělal ještě něco malinko navíc, než dělá? :-)
Mám skript, který se zeptá při instalaci na jméno počítače a pak ten text (jméno PC které zadám do messageboxu toho scriptu) vloží do souboru unattended.xml.
Respektive v tom xml najde řetězec "[Prompt]" a tento řetězec nahradí vloženým textem.

Potřeboval bych, aby ještě tento skript nahradil jiné místo ve stejném souboru (unattended.xml) a to následovně:
potřeboval bych rozlišit podle pátého znaku ze zadanéjo jména PC (xxxxWxxxx) pro Workstation a nebo (xxxxNxxxxx) pro notebooky aby nahradil text REPLACE v řádku

ou=1221_REPLACE,OU=1000_Praha,dc=company,dc=cz

a to tak, aby pokud je na pátém místě W, tak ou=1221_WS,OU=1000_Praha,dc=company,dc=cz (napříkad pro počítač se jménem 1849WAH1987)

a pokud je na pátém místě N, tak ou=1221_NB,OU=1000_Praha,dc=company,dc=cz (napříkad pro počítač se jménem 14WANLRE45)


zde je skript:

Kód: Vybrat vše

Option Explicit
Dim unattendFile, WshShell, fso, unattendFileObject, strUnattendedAll, strPos
unattendFile = "C:\Windows\Panther\unattend.xml"
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(unattendFile) = False Then WScript.Quit
Set unattendFileObject = fso.OpenTextFile(unattendFile, 1)
strUnattendedAll = unattendFileObject.ReadAll
unattendFileObject.Close
strPos = InStr(strUnattendedAll, "[Prompt]")
If strPos > 0 Then Call Querry()
wscript.Quit
Private Sub Querry()
Dim answer, computerName, strDefName, strMsg
strDefName = "PC-"&RandomString(6)
strMsg = "Enter a computer name"
Do While answer <> vbYes
computerName = UCase(InputBox(strMsg &vbCrLf&vbCrLf&"Maximum 15 and no special characters. Name must be unique on your network.", "Computer name", strDefName))
If computerName = "" Then
computerName = strDefName
Exit Do
End If
If isValid(computerName) = True Then
answer = MsgBox("Computer name: " & computerName, vbYesNo+vbQuestion, "Verify")
Else
strMsg = "Invalid input, try again"
End If
Loop
strUnattendedAll = Replace(strUnattendedAll, "[Prompt]", computerName)
Set unattendFileObject = fso.OpenTextFile(unattendFile, 2)
unattendFileObject.Write(strUnattendedAll)
unattendFileObject.Close
WScript.Sleep 5000
WshShell.Run "%WINDIR%\System32\oobe\windeploy.exe", 0, True
End Sub
Function RandomString(ByVal strLen)
Dim str, i
Const LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
For i = 1 To strLen
Randomize
str = str & Mid( LETTERS, Int(Len( LETTERS ) * Rnd() + 1), 1 )
Next
RandomString = str
End Function
Function isValid(ByVal strValue)
Dim objRegEx
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True
objRegEx.MultiLine = True
objRegEx.Pattern = "^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$"
If Len(strValue) > 15 Then
isValid = False
Else
isValid = objRegEx.test(strValue)
End If
End Function
Děkuji moc za jakoukoliv pomoc či radu
Uziv00

Re: Pomoc s VBS skriptem

Příspěvek od Uziv00 »

Vítej na PC-HELP!
1. píšeš soubor (unattended.xml), ale v kódu vidím unattend.xml.
2. byl by k dispozici i ten soubor unattend? Musím ho zkontrolovat, zda se tam někde neobjevuje ou v některém slově, pak by to hledání nemuselo dopadnout dobře... A taky to musím na něčem vyzkoušet.
wolfie
nováček
Příspěvky: 3
Registrován: 12 kvě 2022 22:48

Re: Pomoc s VBS skriptem

Příspěvek od wolfie »

Ahoj

děkuji za reakci. Skript přikládám, jedná se o unattend.xml, to unattended byl můj překlep, za což se omlouvám.
jedná se o řádek č. 69, <MachineObjectOU>ou=1221_REPLACE,OU=1000_Praha,dc=company,dc=cz</MachineObjectOU>

ale klidně by celý tento řádek tam vůbec nemusel být a místo toho by na tom řádku mohlo být třeba jen "REPLACEME" a to by se pak mohlo nahradit tím vbs skriptem buď za
<MachineObjectOU>ou=1221_WS,OU=1000_Praha,dc=company,dc=cz</MachineObjectOU>
nebo
<MachineObjectOU>ou=1221_NB,OU=1000_Praha,dc=company,dc=cz</MachineObjectOU>

Děkuji moc!

Kód: Vybrat vše

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="oobeSystem">
<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>0405:00000405</InputLocale>
<SystemLocale>cs-CZ</SystemLocale>
<UILanguage>cs-CZ</UILanguage>
<UILanguageFallback>cs-CZ</UILanguageFallback>
<UserLocale>cs-CZ</UserLocale>
</component>
<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">
<TimeZone>Central Europe Standard Time</TimeZone>
<AutoLogon>
<Domain>southsro</Domain>
<Enabled>true</Enabled>
<LogonCount>3</LogonCount>
<Username>admin.south</Username>
</AutoLogon>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<NetworkLocation>Work</NetworkLocation>
<ProtectYourPC>3</ProtectYourPC>
<SkipMachineOOBE>true</SkipMachineOOBE>
<SkipUserOOBE>true</SkipUserOOBE>
</OOBE>
<UserAccounts>
<DomainAccounts>
<DomainAccountList wcm:action="add">
<Domain>southsro</Domain>
<DomainAccount wcm:action="add">
<Group>Users</Group>
<Name>Domain Users</Name>
</DomainAccount>
</DomainAccountList>
</DomainAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Description>Local Admin</Description>
<DisplayName>Local Admin</DisplayName>
<Group>Administrators</Group>
<Name>local.admin</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
</component>
</settings>
<settings pass="specialize">
<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">
<Order>1</Order>
<Path>%WINDIR%\Setup\Scripts\SetupComplete.cmd</Path>
<WillReboot>Never</WillReboot>
</RunSynchronousCommand>
</RunSynchronous>
</component>
<component name="Microsoft-Windows-Security-SPP-UX" 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">
<SkipAutoActivation>true</SkipAutoActivation>
</component>
<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">
<ComputerName>[Prompt]</ComputerName>
</component>
<component name="Microsoft-Windows-UnattendedJoin" 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">
<Identification>
<JoinDomain>southsro</JoinDomain>
<MachineObjectOU>ou=1221_REPLACE,OU=1000_Praha,dc=company,dc=cz</MachineObjectOU>
<TimeoutPeriodInMinutes>5</TimeoutPeriodInMinutes>
<UnsecureJoin>false</UnsecureJoin>
<Credentials>
<Domain>southsro</Domain>
<Username>south.admin</Username>
</Credentials>
</Identification>
</component>
</settings>
<settings pass="windowsPE">
<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">
<InputLocale>0405:00000405</InputLocale>
<SystemLocale>cs-CZ</SystemLocale>
<UILanguage>cs-CZ</UILanguage>
<UILanguageFallback>cs-CZ</UILanguageFallback>
<UserLocale>cs-CZ</UserLocale>
<SetupUILanguage>
<UILanguage>cs-CZ</UILanguage>
</SetupUILanguage>
</component>
<component name="Microsoft-Windows-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">
<Diagnostics>
<OptIn>false</OptIn>
</Diagnostics>
<DynamicUpdate>
<WillShowUI>OnError</WillShowUI>
</DynamicUpdate>
<ImageInstall>
<OSImage>
<WillShowUI>OnError</WillShowUI>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/IMAGE/INDEX</Key>
<Value>1</Value>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
<UserData>
<AcceptEula>true</AcceptEula>
<ProductKey>
<Key></Key>
</ProductKey>
</UserData>
</component>
</settings>
</unattend>
Uziv00

Re: Pomoc s VBS skriptem

Příspěvek od Uziv00 »

Ahoj,
ve skriptu doplň mezi řádky 30 a 31 toto:

Kód: Vybrat vše

        If Mid(computerName, 5, 1) = "W" Then strUnattendedAll = Replace(strUnattendedAll, "REPLACE", "WS")
        If Mid(computerName, 5, 1) = "N" Then strUnattendedAll = Replace(strUnattendedAll, "REPLACE", "NB")
Reaguje to pouze na pátý znak zleva. Pokud tam bude cokoli jiného, než N, nebo W, zůstává řádek tak jak byl.
wolfie
nováček
Příspěvky: 3
Registrován: 12 kvě 2022 22:48

Re: Pomoc s VBS skriptem

Příspěvek od wolfie »

Ahoj.
velmi děkuji za pomoc. Odpovídám až teď, protože jsem strávil 3 a půl měsíce v nemocnici a pustili mne před 2 dny. Tak dávám dohromady resty.
Skript funguje výborně, jen jsem se chtel zeptat, jak udělat ,aby byl vždy ONTOP?
Zkusil jsem přidat do řádky answer = MsgBox("Computer name: " & computerName, vbYesNo+vbQuestion, "Verify") tento výraz +vbSystemModal
a tak ta řádka vypadá takhle : answer = MsgBox("Computer name: " & computerName, vbYesNo+vbQuestion+vbSystemModal, "Verify")

ale bohužel to nefunguje, pří náhodném kliknutí mimo to malé okno , (které se ptá na computer name) jde toto okno do pozadí a dokude se nestiskne ALT+TAB, tak to okno není vidět.
Ještě jendou děkuji za předchozí pomoc.
Uziv00

Re: Pomoc s VBS skriptem

Příspěvek od Uziv00 »

To, co popisuješ je standardní chování woken. A funguje to stejně u jakékoli jiné aplikace. Když si otevřeš třeba kalkulačku a klikneš místo do ní do jiné aplikace, pochopí to systém tak, že budeš pracovat s jinou aplikací a okno kalkulačky se zneaktivní, a pokud máš jinou aplikaci přes celou plochu, zaktivní se jiná aplikace a okno kalkulačky se "schová" pod tuto aplikaci. Vyvoláš ho alt+tab, nebo klikneš na ikonu v liště.
Můžeš zkusit si přímo pohrát s API: https://www.vbforums.com/showthread.php ... ays-on-Top , ale nemyslím si, že to bude fungovat tak, aby okno messageboxu bylo stále aktivní.
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pomoc s výběrem
    od belphegor666 » » v Rady s výběrem hw a sestavením PC
    14 Odpovědi
    9384 Zobrazení
    Poslední příspěvek od belphegor666
  • Pomoc s webem
    od Tay » » v Web-tipy a vaše weby
    5 Odpovědi
    46831 Zobrazení
    Poslední příspěvek od Tay
  • Pomoc při taktu
    od ondyN » » v Taktování a další úpravy PC
    2 Odpovědi
    9807 Zobrazení
    Poslední příspěvek od Dyonysos
  • Pomoc s výběrem nového PC
    od Benzou » » v Rady s výběrem hw a sestavením PC
    6 Odpovědi
    12344 Zobrazení
    Poslední příspěvek od WinDroid
  • Pomoc s výběrem PC monitoru.
    od ski1961 » » v Rady s výběrem hw a sestavením PC
    29 Odpovědi
    16828 Zobrazení
    Poslední příspěvek od WinDroid

Zpět na „Vše ostatní (sw)“