istike2
Goto Top

Powershell - Windows und Office Versionen ohne Admin-Rechte auslesen

Hallo,

ich bin gerade dabei die beiden Versionsnummer mit einem Powershell-Code auszulesen.
Für die Windows-Version nehme ich z. B. diesen hier:
$winver = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name ReleaseID).ReleaseId

Die Fehlermeldung, die ich bekomme:

Set-ExecutionPolicy : Der Zugriff auf den Registrierungsschlüssel
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" wurde verweigert. Starten Sie zum Ändern der
Ausführungsrichtlinie für den Standardbereich (LocalMachine) Windows PowerShell mit der Option "Als Administrator ausführen". Führen Sie zum Ändern
der Ausführungsrichtlinie für den aktuellen Benutzer "Set-ExecutionPolicy -Scope CurrentUser" aus.
In C:\Users\XXXXXX\Desktop\bitlocker_test.ps1:1 Zeichen:1

Das Problem ist, dass ich den Script nicht überall selbst ausführen kann, weil die User 80% nicht im Büro sind.

Mein Plan ist also auf dem Fileserver den Script als EXE (mit PS2EXE) zur Verfügung zu stellen und jeder könnte mir die Infos zukommen lassen können.
(Die Infos werden automatisch als E-Mail versendet)
Die User haben aber keine Admin-Rechte, um das EXE mit erhöhten Rechten auszuführen ...

Welche Möglichkeiten habe ich hier (außer GPO), wenn ich die Infos von User in "Home Office" bekommen möchte?

Vielen Dank für eure Vorschläge ...

Gr. I.

Content-Key: 1405648388

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: Doskias
Doskias 19.10.2021 aktualisiert um 12:20:21 Uhr
Goto Top
Moin,

wenn du schon ein Skript nutzen willst, dann mach es doch direkt mit Powershell und dem dazugehörigem Kommando:

Get-ComputerInfo | select-object OSname,OsVersion | fl

Ansonsten schau einfach mal was du sonst von get-computerinfo benötigst face-wink

Nachtrag:
Oder du fragst Alternativ direkt deinen DC ab:
Get-ADComputer -Filter * -Properties *|Select-Object DNSHostname, OperatingSystem, OperatingSystemVersion

Gruß
Doskias
Mitglied: Cloudrakete
Cloudrakete 19.10.2021 um 12:15:57 Uhr
Goto Top
Warum nicht via GPO? Haben deine User kein VPN?
Wie sind die Maschinen verwaltet, SCCM, M42, Intune etc?
Darüber kann man sowas auch rausfinden, einige AV-Suites samt Managementtools können sowas auch.

Ich finde ein Weg ziemlich bescheiden und würde eher nach Alternativen schauen.
Mitglied: DerWoWusste
DerWoWusste 19.10.2021 um 12:59:49 Uhr
Goto Top
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name ReleaseID).ReleaseId
funktioniert ohne Adminrechte. Was auch immer mit Deiner Executionpolicy ist, an dieser Zeile liegt es nicht.
Die Windowsversion würde ich in Batch mit
ver
auslesen.

Die Officeversion mit
reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"
Wie genau brauchst Du die OffVersion denn?
Mitglied: istike2
istike2 19.10.2021 aktualisiert um 17:23:33 Uhr
Goto Top
Herzlichen Dank für Eure Ideen

@Cloudrakete, ich werde es mal mit dem GPO klären und mache ein Request beim 2nd-Level auf. Vielleicht machen sie mit. bei 30K Usern geht so etwas nicht immer noch schnell ... face-confused

@Doskias, das mit dem Get-ComputerInfo ist zeimlich sinnvoll face-smile

Frage ist hier, wie ich die Tabelle "vertikal" ausgeben kann? Spalte 1 sollte alle Merkmale und Spalte 2 alle Antworten beinhalten ...

@DerWoWusste, ich müsste feststellen können, ob Office 2016 oder 2019 installiert ist. Mit deinem Vorschlag ist es leider nicht mehr möglich.

Eine allgemeine Frage ist, wie ich die Inhalte der beiden Dateien in eine Datei exportieren kann. Wäre es möglich das Ergebnis von GetComputerInfo an die andere-TXT-Datei mit dem gewünschen zwei-Spalten Layout anzuhängen? Diese Angaben werden aktuell in eine CSV exportiert ...

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

##Formatierung der Dateiname##
$MyTime=Get-Date
#in sortierbaren String umwandeln Microsekundengenau
$TimeStamp=$MyTime.tostring("yyyymmddHHmmssffff")  

##ich lese hier die Seriennummer aus##

$sn = (gwmi win32_bios).SerialNumber

##Name des angemeldeten User##
$username = $(Get-WMIObject -class Win32_ComputerSystem | select UserName).username
$profil = $env:USERPROFILE

##ich lege hier den Pfad der TXT-Datei fest##
$infodatei = $profil+"\Desktop\"+$TimeStamp+"_"+$sn+".txt"  
$pcinfodatei = $profil+"\Desktop\"+$TimeStamp+"_"+$sn+".csv"  

##ich lese hier die Rechnerinfos aus##
$winver = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name ReleaseID).ReleaseId  
$OsName = Get-ComputerInfo OsName
$OsVersion = Get-ComputerInfo OsVersion
$OsBuildNumber = Get-ComputerInfo OsBuildNumber
$OsHardwareAbstractionLayer = Get-ComputerInfo OsHardwareAbstractionLayer
$OfficeVer = reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"  

Get-ComputerInfo | select-object OSname,
OsVersion,
WindowsInstallDateFromRegistry, 
WindowsProductId,
BiosBIOSVersion,
BiosFirmwareType,
BiosManufacturer,
BiosReleaseDate,
BiosSeralNumber,
CsCaption,
CsManufacturer,
CsModel,
CsNumberOfLogicalProcessors,
CsSystemFamily | Export-Csv -ErrorAction Stop -path $pcinfodatei -noTypeInformation -Delimiter ";" -Force  

##ich lese hier den Bitlocker Recovery-Key aus##
$BitlockerVolumers = Get-BitLockerVolume
$BitlockerVolumers |
ForEach-Object {
$MountPoint = $_.MountPoint
$RecoveryKey = [string]($_.KeyProtector).RecoveryPassword
if ($RecoveryKey.Length -gt 5) 
{

Write-Output ("Seriennummer: $sn") | Out-File $infodatei  
Add-Content $infodatei "Recovery-Key:$recoverykey"  
Add-Content $infodatei "User:$username"  
Add-Content $infodatei "Benutzerprofil:$profil"  
Add-Content $infodatei "Windows-Version:$winver"  
Add-Content $infodatei "$OsName"  
Add-Content $infodatei "$OsVersion"  
Add-Content $infodatei "$OsBuildNumber"  
Add-Content $infodatei "$OsHardwareAbstractionLayer"  
Add-Content $infodatei "$OfficeVer"  

## ich möchte hier die TXT per Mail versenden ##
Function sendmail($FROM,$TO,$SUBJECT,$BODY,[System.IO.FileInfo[]]$ATTACHMENTS = $null){
  $SMTPHOST = "XXXXXXXXX.kasserver.com"  
  $SMTPPORT = 587
  $SMTPUSER = "report@XXXXXX.de"  
  $SMTPPass = "XXXXXXXXXXXXXXXX"  
  $SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT)
  $SMTPClient.EnableSsl = $true
  $Mail = new-object System.Net.Mail.MailMessage
  $Mail.from = $FROM 
  $Mail.to.add($TO)
  $SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPPass)
  $Mail.Subject = $SUBJECT
  $Mail.Body = $BODY
  # Add Attachments
  if ($ATTACHMENTS){
      foreach ($att in $ATTACHMENTS){
        $Mail.Attachments.Add($att.FullName)
      }
  }
  $SMTPClient.Send($Mail)
  $smtpclient.Dispose()
  $mail.Dispose()
}

sendmail "ABSENDERADRESSE" "ZIELADRESSE" "DEIN BETREFF" "REPORT" (gci $infodatei)}  
}
Mitglied: Doskias
Doskias 19.10.2021 um 17:50:44 Uhr
Goto Top
Meinst du so:
Get-ComputerInfo | select-object OSname,OsVersion | ft
Mitglied: istike2
istike2 19.10.2021 aktualisiert um 18:14:10 Uhr
Goto Top
Zitat von @Doskias:

Meinst du so:

Ich habe auch so probiert, das Ergebnis sieht aber irgendwie komisch aus:

vertikal_csv

Diese ist die genaue Zeile:
Get-ComputerInfo | select-object OSname,OsVersion,WindowsInstallDateFromRegistry,WindowsProductId,BiosBIOSVersion,BiosFirmwareType,BiosManufacturer,BiosReleaseDate,BiosSeralNumber,CsCaption,CsManufacturer,CsModel,CsNumberOfLogicalProcessors,CsSystemFamily | ft | Export-Csv -ErrorAction Stop -path $pcinfodatei -noTypeInformation -Delimiter ";" -Force  

Also mit "ft" funkioniert es nicht ...
Mitglied: 149569
Lösung 149569 20.10.2021 aktualisiert um 08:24:15 Uhr
Goto Top
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Wenn man die obige Zeile in ein Skript packt das am Client ausgeführt werden soll dann wundert mich gar nicht das du eine Access Denied Meldung bekommst, denn die Zeile ist hier absoluter Schwachsinn!! Warum, kann ich dir erklären: die Executionpolicy setzt man einmalig mit Admin-Rechten oder per GPO und setzt die nicht in jedes Skript denn zum Setzen dieser sind ja bekanntlich Admin-Rechte erforderlich! Außerdem ist das hier ja schon ein Skript das ausgeführt wird, bringt also doppelt nichts, außer eben die Fehlermeldung das zum Setzen der Executionpolicy Admin Rechte erforderlich sind. Die Zeile ist also absolut fehl am Platz in einem Client-Skript.
Wenn du die entfernst klappen die Abfragen oben nämlich alle auch ohne Admin-Rechte wie @DerWoWusste oben auch schon darauf hinweist!
Wenn man eine gesetzte Executionpolicy im System umgehen will muss man das schon beim Aufruf der Powershell Session mitteilen und zwar so
powershell -ExecutionPolicy Bypass -F "c:\pfad\script.ps1"  

Jetzt wäre es vielleicht mal an der Zeit sich erst mal die absoluten Grundlagen zu Gemüte zu führen
Powershell Leitfaden für Anfänger
Mitglied: 149569
Lösung 149569 20.10.2021 aktualisiert um 08:03:58 Uhr
Goto Top
Zitat von @istike2:
vertikal_csv

Diese ist die genaue Zeile:
Get-ComputerInfo | select-object OSname,OsVersion,WindowsInstallDateFromRegistry,WindowsProductId,BiosBIOSVersion,BiosFirmwareType,BiosManufacturer,BiosReleaseDate,BiosSeralNumber,CsCaption,CsManufacturer,CsModel,CsNumberOfLogicalProcessors,CsSystemFamily | ft | Export-Csv -ErrorAction Stop -path $pcinfodatei -noTypeInformation -Delimiter ";" -Force  

Also mit "ft" funkioniert es nicht ...

Lass das ft weg, Export-Csv erwartet ein Objekt und keine Formatierungsanweisungen die ft ausgibt.
Get-ComputerInfo | select-object OSname,OsVersion,WindowsInstallDateFromRegistry,WindowsProductId,BiosBIOSVersion,BiosFirmwareType,BiosManufacturer,BiosReleaseDate,BiosSeralNumber,CsCaption,CsManufacturer,CsModel,CsNumberOfLogicalProcessors,CsSystemFamily | Export-Csv -path $pcinfodatei -NoType -Delimiter ";" -Encoding UTF8  
Mitglied: Doskias
Doskias 20.10.2021 um 08:40:08 Uhr
Goto Top
Moin

Zitat von @149569:
Lass das ft weg, Export-Csv erwartet ein Objekt und keine Formatierungsanweisungen die ft ausgibt.

Stimmt, da war ich gestern zu schnell und hab nur kurz drüber nachgedacht und dabei den CSV-Export aus den Augen verloren.
Mitglied: istike2
istike2 20.10.2021 um 15:34:53 Uhr
Goto Top
Vielen Dank für Eure Unterstützung.

LG

I.