winlicli
Goto Top

Hilfe beim Batch Skript

Hallo zusammen,

ich möchte gerne ein Skript schreiben das folgendes macht:

Wenn WindowsBuildNumber 10.0.10586 oder 10.0.14393 enthält, dann führe \\server-ip\pfad\setup.exe aus

und sende ein LOG namens %computername%.log nach \\IP\Pfad.

Ansonsten mache nichts und sende ein Log nach \\IP\Pfad.

Wäre super wenn ich dafür eine Lösung hätte.

Danke face-smile

Lg

Content-Key: 339848

Url: https://administrator.de/contentid/339848

Printed on: April 23, 2024 at 15:04 o'clock

Member: SlainteMhath
SlainteMhath Jun 06, 2017 at 09:19:26 (UTC)
Goto Top
Moin,

zeig doch mal, was du schon an Code hast.

lg,
Slainte
Member: Kraemer
Kraemer Jun 06, 2017 at 09:30:58 (UTC)
Goto Top
Moin,

ver ist dein Freund:
ver /?

Zeigt die Windows-Version an.

VER

Gruß
Mitglied: 114685
114685 Jun 06, 2017 updated at 10:08:30 (UTC)
Goto Top
Moin,

help in der Konsole (Eingabeauffforderung) aufgerufen zeigt dir eine Liste aller verfügbaren Befehle, die man in Batch benutzen kann. Zu jedem Befehl gibt es mit befehl /? eine ausführliche Beschreibung, was der Befehl kann und macht. face-wink

Beispiel: for /?

Gruß
Member: WinLiCLI
WinLiCLI Jun 06, 2017 updated at 10:16:48 (UTC)
Goto Top
Hi,

wie ich lese haben einpaar nicht ganz verstanden was die Aufgabe ist.

Ich möchte ein Skript schreiben (um dies nachher per GPO als einmaligen Windows Task zu verteilen) schreiben,

der automatisch erkennt welche BuildVersion von Windows 10 es ist (es muss also Windows 10 sein, deshalb die 2 genannten Nummern oben.)

Das Skript soll also nur dann den o. g. Pfad starten wenn die Buildnr. vorhanden ist. Danach soll mir ein Log geschickt werden.

Wenn nicht eine von den beiden Nummern vorhanden ist, soll er mir ein Log schicken und einen exit machen.

Was ich in meinem Testskirpt bis jetzt habe ist:


systeminfo > c:\systeminfo.log

findstr /L "10.0.14393" c:\systeminfo.log
if %errorlevel% == 0 (goto a) else (goto b)

:a
echo ich habe das 10.0.14393 gefunden
goto :eof

:b
echo ich habe das nicht gefunden
goto :eof
Mitglied: 114685
114685 Jun 06, 2017 at 10:19:19 (UTC)
Goto Top
Hi,

da liest du falsch. Lies das doch mal so:
Eigeninitiative ist der erste Weg. Und wenn du dann auch noch in Codetags deine angefangene Lösung präsentierst und nicht weiterkommst, wirst du sicher auch Hilfe finden.

So jedenfalls nicht. face-wink

Gruß
Member: Kraemer
Kraemer Jun 06, 2017 updated at 10:26:10 (UTC)
Goto Top
Zitat von @WinLiCLI:
systeminfo > c:\systeminfo.log
 
findstr /L "10.0.14393" c:\systeminfo.log  

was soll der Quatsch mit systeminfo? Dauert doch viel zu lange!

Dann hast du in deinem Code übersehen, dass du zwei Prüfungen brauchst.
Einfache Lösung: Hilfsvariable

Setze am Anfang deines Codes eine Variable und setzte die auf einen Wert - von mir aus auf false
Jetzt machst du deine Prüfungen auf Versionsnummer: Variable auf true setzen

Jetzt prüfst du ob deine Variable true ist und führst deinen Code aus.

Fertig
Member: SlainteMhath
SlainteMhath Jun 06, 2017 updated at 10:26:25 (UTC)
Goto Top
um dies ... per GPO ... zu verteilen
Dann wäre allerdings ein WMI Filter die bessere Wahl.

edit:
und alls Tipp für die Batch:
for /f "tokens=4-6 delims=.] " %%i in ('ver') do set VERSION=%%i.%%j.%%k  
Mitglied: 133417
133417 Jun 06, 2017 updated at 10:33:58 (UTC)
Goto Top
wmic os get Version | findstr "10\.0\.10586 10\.0\.14393" >nul 2>&1 && (  
    echo Build numbers matching, do something
) || (
    REM DO something else
)
Ich möchte ein Skript schreiben (um dies nachher per GPO als einmaligen Windows Task zu verteilen) schreiben,
Dann tu das doch ?!

Gruß
Member: Biber
Biber Jun 06, 2017 at 11:22:25 (UTC)
Goto Top
[OT]

ich habe mal eine entbehrliche Dialog-Sequenz in einem ebenfalls verirrten und entbehrlichen Beitrag in einem abgelegenen Seitenarm dieses Forums ausgeblendet.

@114685/@BibersBaum
Es steht zu erwarten, dass ihr beide euch noch ein paarmal in irgendwelchen Beiträgen begegnet.

Nichts spricht dagegen, dem jeweils anderen die eigene Sicht der Dinge näherbringen zu wollen - auch mit Augenzwinkern und Ironie.

Da aber die Wahrscheinlichkeit, der andere könne mit einem "Ja klar, da hast du auch Recht. Danke für den Hinweis!" antworten wesentlich geringer ist als der eines Erdrutschsieges der SPD bei der nächsten Wahl:

BITTE vermeidet unnötige Eskalationen, verbalen Schlagabtausch und erst recht Beleidigungen.

Ihr beide könnt euch vielleicht auf dieser Ebene noch durchaus souverän bewegen - aber mir graut vor den potentiellen Nachahmern, die dann auch versuchen könnten, kleine Spitzen zu formulieren.

Ist nur eine Bitte, und die erhoffte Reaktion ist NICHT ein Abmelden/Löschen des Accounts.

Grüße
Biber
[/OT]
Mitglied: 133417
133417 Jun 06, 2017 updated at 11:28:35 (UTC)
Goto Top
Danke! Diese nicht von mir provozierte Offtopic-Geplänkel hat hier ja auch nichts zu suchen.
Member: Pedant
Pedant Jun 06, 2017 at 12:22:28 (UTC)
Goto Top
Hallo,

auch wenn das hier gerade nicht gefragt war, wie kommt man denn ans "Kleingedruckte"?
10.0.15063.332

C:\>wmic os get Version
Version
10.0.15063

C:\>ver
Microsoft Windows [Version 10.0.15063]

C:\>systeminfo
Betriebssystemname: Microsoft Windows 10 Pro
Betriebssystemversion: 10.0.15063 Nicht zutreffend Build 15063

PS C:\> Get-CimInstance Win32_OperatingSystem -Property *
Caption : Microsoft Windows 10 Pro
Version : 10.0.15063

PS C:\> (Get-WmiObject win32_operatingsystem).caption
Microsoft Windows 10 Pro
PS C:\> (Get-WmiObject win32_operatingsystem).version
10.0.15063

Eine vollständige Versionbezeichnung sieht doch beispielsweise so aus:
Windows 10 Pro, 1703 (10.0.15063.332)

Ich finde allerdings keinen Befehl, der die "332" als Text ausgibt und winver ist nicht gerade skripttauglich.

In der Registry stehen alle Werte drin:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"CurrentVersion"="6.3"
"EditionID"="Professional"
"ProductName"="Windows 10 Pro"
"ReleaseId"="1703"
"CompositionEditionID"="Professional"
"CurrentBuild"="15063"
"CurrentBuildNumber"="15063"
"CurrentMajorVersionNumber"=dword:0000000a
"CurrentMinorVersionNumber"=dword:00000000
"UBR"=dword:0000014c

Die "332" kann ich dort auch auslesen
C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
UBR REG_DWORD 0x14c

0xc14 = 332

Geht's echt nur über reg und dann (wie auch immer) hex in dez wandeln?
if "%hex%" == "0x000" set dez=0 & if "%hex%" == "0x001" set dez=1 & ... & if "%hex%" == "0xfff" set dez=4095

Gruß Frank
Mitglied: 114685
114685 Jun 06, 2017 at 12:49:11 (UTC)
Goto Top
Hi,

Zitat von @Pedant:
Geht's echt nur über reg und dann (wie auch immer) hex in dez wandeln?

Nö, zumindest was die Umwandlung angeht, geht's einfacher mit
set/a "h2d=0x14c"  

Gruß
Member: Pedant
Pedant Jun 06, 2017 updated at 16:10:22 (UTC)
Goto Top
Hallo,

Zitat von @114685:
...zumindest was die Umwandlung angeht, geht's einfacher mit
set/a "h2d=0x14c"  
Danke hugonatter.
Mein Umwandlungs-"Vorschlag" war nicht wiklich ernst gemeint, aber auf set bin ich nicht gekommen.

Zusammen mit den anderen Kommentaren ergibt das eine vollständige Versionsauslesung.

win10version.cmd
@echo off

:: Product
for /f "tokens=1,2,*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName') do (  
	set ProductName=%%k
)

::Release
for /f "tokens=1,2,*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId') do (  
	set Release=%%k
)

:: Build
for /f "tokens=4-6 delims=.] " %%i in ('ver') do (  
	set MajorVersion=%%i
	set MinorVersion=%%j
	set Build=%%k
)
for /f "tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR') do (  
	set /a UpdateBuildRevision=%%i
)
set BuildComplete=%MajorVersion%.%MinorVersion%.%Build%.%UpdateBuildRevision%

:: Architecture
for /f %%i in ('wmic os get OSArchitecture ^| find "bit"') do (  
	set Architecture=%%i
)

:: UI-Language
for /f "tokens=3" %%i in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sLanguage') do (  
	set UILanguage=%%i
)

:: OS-Language
for /f %%i in ('wmic os get OSLanguage') do (  
	REM https://www.autoitscript.com/autoit3/docs/appendix/OSLangCodes.htm
	if "%%i" == "1031" set OSLanguage=deu.  
	if "%%i" == "1033" set OSLanguage=eng.  
)
REM oder
for /f "tokens=3" %%i in ('powershell [CultureInfo]::InstalledUICulture') do (  
	set OSLanguage=%%i
)
set OSLanguage=%OSLanguage:~0,3%.

:: Output
REM goto output2
:output1
echo(
echo ProductName        : %ProductName%
echo Release            : %Release%
echo MajorVersion       : %MajorVersion%
echo MinorVersion       : %MinorVersion%
echo Build              : %Build%
echo UpdateBuildRevision: %UpdateBuildRevision%
echo BuildComplete      : %BuildComplete%
echo Architecture       : %Architecture%
echo UILanguage         : %UILanguage%
echo OSLanguage         : %OSLanguage%
echo(

:output2
echo %ProductName% %Architecture% ^(%OSLanguage%/%UILanguage%^), %Release% ^(%BuildComplete%^)

Output
ProductName        : Windows 10 Pro
Release            : 1703
MajorVersion       : 10
MinorVersion       : 0
Build              : 15063
UpdateBuildRevision: 332
BuildComplete      : 10.0.15063.332
Architecture       : 64-bit
UILanguage         : DEU
OSLanguage         : Eng.

Windows 10 Pro 64-bit (Eng./DEU), 1703 (10.0.15063.332)


@WinLiCLI
Bist Du mit Deinem Testskript jetzt fertig oder wo hängt's?

Gruß Frank

PS: Ich hab die CMD nochmal überarbeitet/ergänzt.
PPS: Zeile 41 gefällt mir besonders gut.