Jump to content

daabm

Expert Member
  • Gesamte Inhalte

    5.603
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von daabm

  1. Geht schon, wenn man sich festlegt, wie das im CSV dann entahalten sein soll. Kann man mit calculated properties bei Select-Object recht einfach lösen.
  2. Aber bitte mit Write-Irgendwas davor (und Klammern um den Ausgabetext) und nicht einfach in die Pipe schieben (Nur so aus Gewohnheit...)
  3. WSH-Objekte schmeißen eine Terminating Exception - bei mir zumindest: Try { $WshShell = New-Object -comObject WScript.Shell $Shortcut = $WshShell.CreateShortcut("$env:temp\Blubb\Scans.lnk") $Shortcut.TargetPath = "\\fs1\scan2file\$user" $Shortcut.Save() } Catch { $MyError = $_ Write-Host "Message: $( $MyError.Exception.Message )" Write-Host "HResult: $( $MyError.Exception.HResult )" } Was Du mit dem HResult anfängst, bleibt dann Dir überlassen
  4. Jedes NAS bringt mit Samba eine "Art" Active Directory mit. Für ne Handvoll MA ohne große Verfügbarkeitsansprüche reicht das. Scale-Out ist aber nicht möglich, DHCP/DNS mit AD-Integration auch nicht und echtes Multi-Master wie in einem AD mit mehreren DCs gibt es auch nicht. Ich bin bei @Nobbyaushb - ne Anfangsberatung wäre nicht falsch. Was da am Ende rauskommt, würde ich mal "technologieoffen" 😁 lassen.
  5. Ich stelle mir spontan die Frage, ob das überhaupt ein "Server" mit "Windows" sein muß . Vom Profil her - alles, was ich lese, deckt jedes bessere Home-NAS locker ab. Inkl. SMB1 und SAMBA als Minimal-AD-Ersatz.
  6. Hm - mein Bauchgefühl sagt, daß da das Datenmodell "nicht optimal" ist (man könnte auch flapsig sagen #grütze), aber wer bin ich, daß ich das remote beurteilen könnte
  7. XML hat per se kein "Eintrag bereits vorhanden", es gibt keinen "Primary Key", der eindeutig sein muß. "Duplikate" sind explizit nicht verboten. So gesehen mußt Du das so lösen Und falls Du mal wieder so ein Problem hast: Ohne Sample Data ist da schwer zu helfen. Ich verstehe z.B. nicht, was Du meinst mit
  8. GPO. Siehe Link oben - seDenyXYZright.
  9. Das regelt man aber bitte nicht über "allowed to logon" in den Accounteinstellungen, sondern über passende Gruppen und seDenyInteractiveLogonPrivilege (bzw. wenn die Umgebung vom Grundsatz her eh keine Anmeldung erlaubt - was auf Dauer einfacher ist - über seInteractiveLogonPrivilege).
  10. Nachdem Ihr jetzt schon viel diskutiert habt, werfe ich noch "scope" in den Raum und [ref]. Ich glaube, jede Suchmaschine liefert passende vertiefende Hinweise @testperson Mein Monk achtet peinlichst darauf, die Pipeline sauber zu halte vor unbeabsichtigtem Inhalt, macht es wie @cj_berlin und gibt einfach das Ergebnis "aus", womit es in ebenjener Pipeline und damit im Return des aufrufenden Scope landet. "Return" hilft da nicht - alles was unbeabsichtigt in der Pipeline gelandet ist, wird ebenso zurückgegeben. @Dukel Das mit dem Scope gilt auch für Funktionen - jede "Hauptfunktion" kann ihre eigene Childversion von "Kind{}" haben. Macht es im Zweifel nicht einfacher, ist aber manchmal durchaus hilfreich, weil importierte Funktionen nicht die eigenen stören können.
  11. seServiceLogonRight, seDenyInteractiveLogonRight und seDenyRemoteInteractiveLogonRight sind die Rechte, auf die es hier ankommt Mit den Accounteinstellungen sollte man da gar nicht erst anfangen. Zum Einlesen: https://evilgpo.blogspot.com/2015/04/wer-bin-ich-und-was-darf-ich.html Und nein, so eine "Checkbox" gab es nie.
  12. daabm

    Letzter macht das Licht aus 2

    Schön ist relativ Nachdem die Bremsen gepflegt wurden, brauch ich ne neue Frontschürze (selbst verschuldet ein Stück abgerissen). Die spinnen, die Autohersteller...
  13. Zum einen installieren wir alle unsere Server schon seit über 10 Jahren als rein englische Basisinstallation - für Kundensysteme kommt das deutsche LP noch drauf. Zum anderen bin ich in solchen Momenten echt froh, daß wir ein Konzern sind und ich mich auf meine AD-Insel zurückziehen kann. Mit OS-Patches habe ich nichts zu tun (außer privat natürlich... "IT-Admin der Ehefrau" ) @NorbertFe 100% sind doch gut - dachte ich bisher immer 😂
  14. Ich würde es andersherum machen - GPO auf eine Gruppe von Testclients einschränken und SMB dort dann erzwingen. Auf den DCs kann man da nix selektiv machen, entweder man erzwingt es oder halt nicht. SMB Signing hat "eigentlich" nichts mit Account-Sperrungen zu tun. Vielleicht hast Du mehr als nur eine Herausforderung...
  15. Problematisch finde ich das hier: Das bleibt mit "Vorhanden, überschreiben? (j/n)" stehen, wenn man's interaktiv ausführt. Was schreiben denn die ganzen Write-Verbose so in die Konsole? Ich habe mir auch erlaubt, den Code etwas lesbarer zu machen $ProfileName = "VPNNAME" # Validate VPN profile Write-Verbose "Searching VPN profiles for `"$ProfileName`"." If ( $AllUserConnection ) { # Get VPN profile running in the user's context $Vpn = Get-VpnConnection -Name $ProfileName -AllUserConnection -ErrorAction SilentlyContinue } Else { # Get VPN profile running in the 'all users' context $Vpn = Get-VpnConnection -Name $ProfileName -ErrorAction SilentlyContinue } If ( $Null -eq $Vpn ) { # Exit if VPN profile does not exist Write-Warning "VPN connection `"$ProfileName`" not found." Return } Else { Write-Verbose "VPN connection `"$ProfileName`" found." } # Use transaction for registry updates Start-Transaction #Create registry REG add "HKLM\System\CurrentControlSet\Services\RasMan\Config\" # Search AutoTriggerDisabledProfilesList for VPN profile $Path = 'HKLM:\System\CurrentControlSet\Services\RasMan\Config\' $Name = 'AutoTriggerDisabledProfilesList' Write-Verbose "Searching $Name in $Path for VPN profile `"$ProfileName`"..." Try { # Get the current registry values as an array of strings [string[]]$DisabledProfiles = Get-ItemPropertyValue -Path $Path -Name $Name -ErrorAction Stop } Catch { Write-Verbose "$Name does not exist in $Path. No action required." Return } If ( $DisabledProfiles ) { # Create ordered hashtable $List = [Ordered]@{} $DisabledProfiles | ForEach-Object { $List.Add("$($_.ToLower())", $_) } # Search hashtable for matching VPN profile and remove if present If ( $List.Contains( $ProfileName )) { Write-Verbose 'Profile found. Removing entry...' $List.Remove( $ProfileName ) Write-Verbose 'Updating the registry...' Set-ItemProperty -Path $Path -Name $Name -Value $List.Values -UseTransaction } } Else { Write-Verbose "No profiles found matching `"$ProfileName`"." Return } # Add user SID to registry If ( $AllUserConnection ) { $SID = 'S-1-1-0' Write-Verbose "Adding SYSTEM SID $SID to registry..." } Else { Try { $SID = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value Write-Verbose "Adding user SID $SID to registry..." } Catch { Write-Warning $_.Exception.Message Return } } $Parameters = @{ Path = 'HKLM:\SYSTEM\CurrentControlSet\Services\RasMan\Config\' Name = 'UserSID' PropertyType = 'String' Value = $SID UseTransaction = $True } New-ItemProperty @Parameters -Force | Out-Null # Add VPN profile name to registry $Parameters = @{ Path = 'HKLM:\SYSTEM\CurrentControlSet\Services\RasMan\Config\' Name = 'AutoTriggerProfileEntryName' PropertyType = 'String' Value = $ProfileName UseTransaction = $True } New-ItemProperty @Parameters | Out-Null # Add VPN profile GUID to registry Write-Verbose "Adding VPN GUID $GUID to registry..." [guid]$GUID = $Vpn | Select-Object -ExpandProperty Guid $Binary = $Guid.ToByteArray() $Parameters = @{ Path = 'HKLM:\SYSTEM\CurrentControlSet\Services\RasMan\Config\' Name = 'AutoTriggerProfileGUID' PropertyType = 'Binary' Value = $Binary UseTransaction = $True } New-ItemProperty @Parameters | Out-Null # Add phonebook path to registry If ( $AllUserConnection ) { $Path = Join-Path -Path $env:programdata -ChildPath Microsoft\Network\Connections\Pbk\rasphone.pbk Write-Verbose "RAS phonebook path is $Path." } Else { $Path = Join-Path -Path $env:userprofile -ChildPath AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk Write-Verbose "RAS phonebook path is $Path." } $Parameters = @{ Path = 'HKLM:\SYSTEM\CurrentControlSet\Services\RasMan\Config\' Name = 'AutoTriggerProfilePhonebookPath' PropertyType = 'String' Value = $Path UseTransaction = $True } New-ItemProperty @Parameters | Out-Null # Commit registry changes Complete-Transaction # Disable the "Disconnect" button in VAN UI/Settings > ensuring that "Connect Automatically" cannot be unchecked ( get-content -Path "$env:appdata\Microsoft\Network\Connections\Pbk\rasphone.pbk") | ForEach-Object {$_ -Replace "Options=0", "Options=18"} | Set-Content -Path "$env:appdata\Microsoft\Network\Connections\Pbk\rasphone.pbk"
  16. https://evilgpo.blogspot.com/2015/04/wer-bin-ich-und-was-darf-ich.html (Muß echt mal ne aktuelle Version davon schreiben...)
  17. Komplexität halte ich für sinnfrei, lieber länger. Und bei 365 Tagen Gültigkeit kann man auch gleich "nicht ablaufend" verwenden - die Historie ist bei nem Änderungsintervall von nem Jahr auch eher uninteressant. Aber jm2c Ich bin ein erklärter Gegner von erzwungenen Kennwortänderungen. Wie das BSI 😂
  18. Ehm - warum hängt Ihr Euch grad immer am "Befüllen" des Attributs auf? Es geht um das "Auslesen"...
  19. Group Policy Preferences "Umgebungsvariable" mit Zielgruppenadressierung "LDAP-Abfrage".
  20. daabm

    Letzter macht das Licht aus 2

    Nabend wieder an Land Auto war heute mal wieder in der Werkstatt, Bremsenwartung. Das Zeug benutzt man ja quasi nie, das gammelt sonst einfach weg... 🙈
  21. Hier - bis auf die von Microsoft erzwungenen Ausnahmen für SQL- und HyperV-Cluster, die noch nicht ohne können. Frei nach einer meiner bevorzugten Bands: "It's a long way to the top"... Ich weiß inzwischen Dinge über Kerberos in Windows und in krb5.conf, die ich eigentlich nie wissen wollte 😂
  22. Den richtigen DC finden sie ja schon. Kannst sogar einen "preferred" einstellen, falls der PDC hinter einem WAN-Link hängen sollte. Das Problem steckt in GPMC/DFSR. Und um das zu lösen, müssten sie das Anlegen und Importieren komplett nachbauen. Ich kann schon verstehen, daß man das nicht unbedingt will, wenn es doch "offizielle" APIs gibt. "Timing verändern" ist so ein zweischneidiges Schwert - wie lange willst denn warten, bis DFSR auf dem von Dir grad genutzten Referral das Verzeichnis erstellt hat?
  23. Quest behandelt das nicht selbst, warum auch - sie nutzen das GPMC-API, das für das Anlegen von GPH und GPT verantwortlich ist. Da müßte das gefixt werden...
  24. Ok Wir haben ein Drittprodukt (Quest GPOAdmin), das GPOs über Domänengrenzen synchronisieren kann. Ein in der Quelldomäne per GPMC-API erstelltes GPO-Backup im ZIP-Format wird dabei zum Zielserver übertragen. Dort wird von der Ziel-GPO eine tempoärer Kopie erzeugt und dann das entpackte Zip (wieder per GPMC-API) in diese Kopie importiert. Danach wird (wieder GPMC-API) davon ein Backup estellt, die temporäre Kopie gelöscht und das aktuelle Backup in die ursprüngliche "produktive" GPO importiert (noch mal GPMC-API). (Klingt aufwändig mit der temporären Kopie und dem vielen Import/Export, das hängt mit den verfügbaren Workflows zusammen - man kann nicht nur "immediate deployment" machen, sondern auch erst mal "stagen"- das sprengt den Rahmen hier aber.) Das arbeitet also mit ein wenig Zip/Copy, der Rest ist GPMC-API nativ. Dabei fällt der Import in die temporäre Kopie regelmäßig auf die Nase, wenn der jeweilige Server mehr als einen DC sieht. In AD wird das GPC-Objekt immer auf dem PDC angelegt (das kriegt das GPMC-API noch hin). Der GPT-Sysvol-Ordner entsteht dabei ebenfalls "initial" - aber nicht auf dem PDC, sondern "irgendwo". Der folgende Import per GPMC-API greift AD-seitig auch nur auf den PDC zu und findet den GPC-Container. Der Dateiimport in den GPT-Sysvol-Ordner läuft über DFSR aber wieder gegen "irgendeinen" DC. Und DFSR hat auch innerhalb einer Site Latenzen -> Sysvol-Ordner nicht vorhanden -> "Path not found". Macht man das von Hand, ist es i.d.R. kein Problem, weil man von Hand nicht so schnell klicken kann (DFSR-Latenzen intra-site sind im Sekundenbereich). Das ganze läuft hier aber programmatisch: Neue temporäre Kopie erstellen und "sofort" importieren. Ich hoffe, das ist soweit verständlich ausgedrückt Workasround: In jeder Domäne eine Site, in der nur der PDC und der jeweilge Server stehen. Dann ist nicht nur AD zufrieden, sondern auch DFSR - das findet dann auch nur noch "the one" Das WLAN-Snapin war diesbezüglich auch speziell. Das hatte den Bug, daß es die DC-Auswahl in GPMC, die von GPMC an GPEdit (korrekt eigentlich: GPME.MSC) beim Aufruf weitergegeben wird, ignoriert hat und auch "irgendeinen" DC auswählte. Ergebnis: Klickte man in GPEdit auf "neue WLAN-Policy", wurde von GPEdit auf dem PDC im GPO-Container ein "Machine"-Container erstellt. Das Snapin selbst erstellt darin dann ein WLAN-Objekt, bei Bedarf aber auch den zugehörigen Container. Ging das nicht gegen den PDC -> Replikationskonflikt (CNF:) für den "Machine"-Container, wenn es den nicht vorher "aus Gründen" schon gab -> GPO kaputt.
  25. Eventlogs kennst Du und hast Du geprüft auf Client und Druckserver?
×
×
  • Neu erstellen...