-
Posts
607 -
Joined
-
Last visited
Content Type
Forums
News
20th
EduGeek EDIT Conference
Blogs
Everything posted by Sephiroth
-
For context, we are a large secondary. We have 2 Hyper-V hosts and 1 physical DC and 1 virtual DC. The physical is the authoritative time server for the domain and allows logins and basic usage if the cluster fails for any reason. Each host has 2 x 10 core CPUs and 256GB RAM, which is enough to run our entire estate on 1 host. We are running 29 VMs in total, which is everything barring 3 backup servers, 1 storage server, and the DC. The number of VMs is due to come down as we migrate services away to cloud, such as SIMS, which is the highest spec machine we have. Other than that, we separate VMs by function; File Servers, Catering, Printing, Service Desk, DHCP, WSUS, NPS, etc.
-
Digital Signage software, what do you use?
Sephiroth replied to Mixed's topic in AV and Multimedia Related
Slightly late reply, sorry... We use Optiplex 3060 Micro pcs running Windows mounted behind the screens. Plenty of power to run 4k content. Managed by GPO so I barely have to touch them. Set to turn on in BIOS every morning and we have a Xibo command scheduled to shut them down if not overridden, which works really well. -
Digital Signage software, what do you use?
Sephiroth replied to Mixed's topic in AV and Multimedia Related
We have Xibo self-hosted on Docker. Very powerful but not the simplest to understand. We're looking at Trilby TV so that we can move the day-to-day running away from technical personnel. In the past we've used Navajo Mediacat, which is again powerful and complex but was also quite expensive and the hardware we had was underpowered (this was about 10 years ago). Not sure what they're like now, but I wouldn't rule them out based on previous experience. -
We use Lightspeed at endpoint and Sophos as a catchall. I'd be interested to see the results once you've counted everything up.
-
A car vs money scenario... Please help me make up my mind!
Sephiroth replied to AB_IT's topic in General Chat
If it's drivable still, then keeping it on the road with the view to sort the clutch out is probably the best move. As much as I'm an advocate of EVs, they are not for everyone yet, and are very expensive initially. perhaps something to consider later down the line when the mortgage is clear. One thing I would suggest, as you seem to be happy delving into the workings of the car, see if it's something that you really can do. Sometimes jobs sound daunting but actually aren't. My partner has a 57 plate Renault Scenic that I've been maintaining for the last few years. It's got 140k on the clock and I've done almost all of the repairs on it over the last 5 years, including replacing solenoids on the automatic transmission, and replacing a relay on the electronic parking brake board. I like the video tutorials from autodoc (they have a Youtube channel) as they show exactly how to do a huge amount of jobs. Using their tutorials, I recently replaced both front suspension arms, coilsprings, spring mounts, and track rods. Took me 2 days and about £100 in parts, whereas the quote I had from the garage was over 10x that (issues arose as an MOT failure). -
Blocked by GPO for everyone except admins and disallowed by applocker to prevent running at all. We ran into an issue last year where, because the store takes a few seconds to figure out that it's blocked by GPO, if the user is quick enough they can browse the store on a web browser and find what they want to install, then get it to take them to the app store page, tell it to install and quickly close it before it has a chance to lock out. The application will still install in the background, regardless of user installation permissions.
-
We're striving for 24" across the board. 24" is the sweet spot for 1080p resolution and text readability without having to mess around with scaling (obviously we have some that have sight issues that have scaling). As it stands, we have some ancient 19" 1600x900 AIOs which will be defunct in October, all of which are on budget to replace, and a handful of 23" 1650x1050 desktops, which are about on par as far a readability goes. The PCs that these are on will likely be replaced with 24" FHD AIOs, so the screens will probably go to admin to replace aging secondary screens, where they have 19" or 20" low res monitors.
-
So having had a look at this, you can create a custom command and inject it into a bootable image, then create your own menu items to look at the relevant server and configs. Manually run clonezilla to set up your image and get it to generate the backup file to /tmp/ocs-, copy the file to '/home/partimag', and have a look at it in your preferred editor. It will still prompt for any required options by specifying "ask_user", so you can automate as much or little as you need. you will likely want to set this for the filename and source drive. It will look something like this: /usr/sbin/ocs-sr -q2 -c -j2 -z9p -i 0 -sfsck -scs -senc -p choose savedisk ask_user ask_user Once you're happy, cd to '/home/partimag' and run something like (where './custom-ocs' is the name of the file you've generated): ocs-live-dev -g en_GB.UTF-8 -k gb -s -c -m ./custom-ocs I advise getting the "-g" switch for language (probably 'en_GB.UTF-8'), and "-k" switch for keyboard layout (probably 'gb') right so you don't have to mess around later. Extract the contents of the resultant file and edit the '/boot/grub/grub.cfg' file to add a new menu item, something like this: menuentry "Custom Save Disk" --id custom-save { search --set -f /live/vmlinuz $linux_cmd /live/vmlinuz boot=live union=overlay username=user config components noswap edd=on nomodeset enforcing=0 noeject locales=en_GB.UTF-8 keyboard-layouts=gb ocs_prerun1="mount -t cifs -o user='',password= /// /home/partimag" ocs_live_run="custom-ocs" ocs_live_extra_param="" ocs_live_batch="no" vga=788 toram=live,syslinux,EFI,boot,.disk,utils ip= net.ifnames=0 quiet nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1 $initrd_cmd /live/initrd.img } The actual custom-ocs file is placed in the 'pkg' directory. You can add multiple here (suggest naming 'ocs-savedisk' and 'ocs-restoredisk' with the appropriate settings) and reference them in multiple menu entries. Once you're happy, copy to a USB stick and boot to it. Hopefully everything should just load. More information on creating the custom image Here. Also good references Here on creating bootable drives.
-
Not as much as it'll cost to pay the fees to Google when they find out. I'm almost certain this would be a breach of their terms of service.
-
I have a server running iPXE, which houses various tools and utilities that can be booted over the network. The Clonezilla object in iPXE is set to use our deployment server as a repository using CIFS, which has the authentication saved in the configs. You could in theory get it to prompt for credentials as well. The place to start is to run Clonezilla manually and copy the arguments it gives you before it starts to a file. That will give you the cli version of the options that you select. Do you plan on using the USB as a repository as well as the boot medium or are you copying straight to NAS? If the former, it does simplify the config. Let me have a play and see what I can come up with based on our setup.
-
I do almost exactly this. I use iPXE to boot the clonezilla image with a few menu options to select what I want to do. This is the clonezilla section of my iPXE menu.config: :czinteractive set os-root ${boot-path}/clonezilla/live kernel tftp://${server-ip}/${os-root}/vmlinuz initrd tftp://${server-ip}/${os-root}/initrd.img imgargs vmlinuz boot=live config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" keyboard-layouts="uk" ocs_live_extra_program="" ocs_live_keymap="uk" ocs_live_batch="no" ocs_daemonon="ssh" usercrypted=Kb/VNchPYhuf6 ocs_lang="" vga=788 nosplash noprompt fetch=tftp://${server-ip}/${os-root}/filesystem.squashfs boot :czsavedisk set os-root ${boot-path}/clonezilla/live kernel tftp://${server-ip}/${os-root}/vmlinuz initrd tftp://${server-ip}/${os-root}/initrd.img imgargs vmlinuz boot=live config noswap nolocales edd=on nomodeset enforcing=0 keyboard-layouts="uk" ocs_prerun1="mount -t cifs -o user='${czuser}',password=${czpass} //${czroot}/Clonezilla /home/partimag" ocs_live_run="ocs-sr -q2 -c -j2 -z9 -i 0 -sfsck -scs -senc -p choose savedisk ask_user ask_user" ocs_live_keymap="uk" ocs_live_batch="no" ocs_daemonon="ssh" usercrypted=Kb/VNchPYhuf6 ocs_lang="" vga=788 nosplash noprompt fetch=tftp://${server-ip}/${os-root}/filesystem.squashfs boot :czrestoredisk set os-root ${boot-path}/clonezilla/live kernel tftp://${server-ip}/${os-root}/vmlinuz initrd tftp://${server-ip}/${os-root}/initrd.img imgargs vmlinuz boot=live config noswap nolocales edd=on nomodeset enforcing=0 keyboard-layouts="uk" ocs_prerun1="mount -t cifs -o user='${czuser}',password=${czpass} //${czroot}/Clonezilla /home/partimag" ocs_live_run="ocs-sr -g auto -e1 auto -e2 -c -r -j2 -k0 -scr -p choose restoredisk ask_user ask_user" ocs_live_keymap="uk" ocs_live_batch="no" ocs_daemonon="ssh" usercrypted=Kb/VNchPYhuf6 ocs_lang="" vga=788 nosplash noprompt fetch=tftp://${server-ip}/${os-root}/filesystem.squashfs boot Interactive just runs the default clonezilla instance; SaveDisk asks you what name you want to give the file, then just saves it to the required destination; RestoreDisk searches for images and asks which one you want to restore. The variables are set elsewhere in the config files. If you want to go more into that, let me know. I got the arguments by running it manually then copying the code it gives you before it starts the process. Alternatively, I believe that you can achieve the same without PXE boot by putting the arguments in a script file on the drive and calling that with the clonezilla command line, rather than going through the prompts.
-
I use Auslogics Duplicate File Finder for thing like this. Free and relatively simple to use.
-
The issue with AI in job applications comes when people use it to look more knowledgeable than they actually are. I would personally love to be working with people that understand how to use a powerful tool like AI, not just taking the verbatim result, but correcting it and tailoring it with the view to understand what it is/does/means. It would be like asking someone that's never met you to look up CVs and cover letters for a random job and write you a custom application, expecting it to be flawless. As @Rob_D says, one way to deal with it is to write the skeleton (at least) first, then get AI to offer tweaks.
-
Thought I'd posted this yesterday, evidently I didn't as it was staring at me this morning I appreciate that you have found a working solution, however, I'll still post the full reply as it may help others in the same situation. -- Depending on exactly what format you want the output to be, and how you are running the script, this can't be done, done with a hack or set up beautifully. There is no way (as far as I'm aware) to colourise individual elements of a printed PSObject. That said you can either bludgeon it into doing what you want if your output is in a VT Escape supported console (standard PS console should be, ISE probably isn't) you should be able to use this: $apps = @() $systemapp = "This is systemapp" function to_yellow ($msg) { "$([char]0x1b)[93m$msg$([char]0x1b)[0m" } function to_green ($msg) { "$([char]0x1b)[32m$msg$([char]0x1b)[0m" } function to_red ($msg) { "$([char]0x1b)[91m$msg$([char]0x1b)[0m" } The example code injects terminal escapes and recolours the text within the string itself. However, if this is to be viewed in any other way, e.g. saved to file or emailed, you'll get a mess of text: This is in [32mgreen[0m, this is in [93myellow[0m, and this is in [91mred[0m A way around this is to have the script write each parameter separately with the "Write-Host" cmdlet. This will take the -ForegroundColor parameter as has been mentioned previously. See the example below: Write-Host "ComputerName = $($System.Name)" Write-Host "Manufacturer = $($System.Manufacturer)" Write-Host "Model = $($System.Model)" Write-Host "Product ID = $($System.SystemSKUNumber)" Write-Host "Serial Number = $($Bios.SerialNumber)" -ForegroundColor Green Write-Host "Username = $($System.Username)" Write-Host "IP Address = $($IP.ipaddress[0])" Write-Host "DNS = $($IP.DNSServerSearchOrder)" Write-Host "Gateway = $($IP.DefaultIPGateway)" Write-Host "MAC Address = $($IP.macaddress)" Write-Host "Network Card = $($IP.Description)" Write-Host "OS Name = $($os.caption)" Write-Host "OSBit = $($OS.OSArchitecture)" Write-Host "WinVersion = $Winver" -ForegroundColor Yellow This will look messy if your fields are of different length (which yours are), but if you just care about functional data that's fine. In my opinion, the best way to deal with this (again, depending on your use case), is to have it output in HTML which can either be emailed or viewed as a webpage/report: #$Computers = Get-Content D:\Documents\Powershell\computers.txt $Headings = 0 ForEach ($Client in $ComputerName) { If (Test-Connection -Computername $client -BufferSize 16 -Count 1 -Quiet) { $System =Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Client $Bios =Get-WmiObject -Class Win32_Bios -ComputerName $Client $os =Get-Wmiobject -ComputerName $Client -Class Win32_OperatingSystem $Disk =Get-WmiObject -ComputerName $Client -class Win32_LogicalDisk -filter "DeviceID='c:'" $IP =Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled = 'True'" -ComputerName $Client $CPU =Get-WmiObject win32_processor -Computername $Client $Chrome =Get-WmiObject -ComputerName $Client -Class CIM_DataFile -Filter "Name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'" $SystemSKUNumber =Get-WmiObject Win32_BIOS | Select-Object SystemSKUNumber $WinVer = Invoke-Command -ComputerName $Client -ScriptBlock { (Get-Item -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion').GetValue("DisplayVersion")} $Obj = [PSCustomObject]@{ 'ComputerName' = $System.Name 'Manufacturer' = $System.Manufacturer 'Model' = $System.Model 'Product ID' = $System.SystemSKUNumber 'Serial Number' = $Bios.SerialNumber 'Username' = $System.Username 'IP Address' = $IP.ipaddress[0] #'0' tells it to only get the IPV4 address# 'DNS' = $IP.DNSServerSearchOrder 'Gateway' = $IP.DefaultIPGateway 'MAC Address' = $IP.macaddress 'Network Card' = $IP.Description 'OS Name' = $os.caption 'OSBit' = $OS.OSArchitecture 'WinVersion' = $Winver 'Build Version' = $os.version 'Chrome Version' = $Chrome.Version 'LastBoot' = [Management.ManagementDateTimeConverter]::ToDateTime( (Get-WmiObject -Class Win32_OperatingSystem -Computer $client | Select -Exp LastBootUpTime) ) 'Memory(GB)' = "{0:N2}" -f ($System.Totalphysicalmemory / 1gb) 'DiskSize(c:)' = "{0:N0}" -f ($Disk.Size / 1gb) 'FreeSpace(GB)' = "{0:N0}" -f ($Disk.Freespace / 1gb) 'UsedSpace(GB)' = "{0:N0}" -f ($Disk.size/1gb - $disk.FreeSpace/1gb) 'PercentFree' = "{0:P0}" -f ($Disk.Freespace / $Disk.Size) 'CPU' = $CPU.name }#End pscustomobject block If ($Headings -eq 0) { $Body = "`n`n" $Body += "`n" $Body += "`t`n"<br /> $Body += "`t`t.green {color: green;}`n"<br /> $Body += "`t`t.yellow {color: yellow;}`n"<br /> $Body += "`t`t.red {color: red;}`n"<br /> $Body += "`t`n`n" $Body += "`t`n" $Body += "`t`t</pre><table>`n`t`t`t`n" Foreach ($Header in (Get-Member -InputObject $Obj -MemberType NoteProperty).Name) { $Body += "`t`t`t`t$Header`n" } $Body += "`t`t`t`n" $Headings = 1 } $Body += "`t`t`t`n" Foreach ($Header in (Get-Member -InputObject $Obj -MemberType NoteProperty).Name) { If ($Header -eq "WinVersion") { $td = "" } ElseIf ($Header -eq "Serial Number") { $td = "" } Else { $td = "" } $Value = $Obj.$Header $Body += "`t`t`t`t$td$Value`n" } $Body += "`t`t`t`n" } } $Body += "`t`t</table>`n`t`n"<br><br>$Body | Out-File -FilePath C:\HTM Obviously this is more in depth, but can be tailored to whatever viewpoints you need simply by changing the HTML/CSS within the code. This is my preferred method as I tend to get reports like this emailed to me periodically for various things, an I can easily tailor the output to suit what I need to know. Hope this helps someone
-
SC-900: Microsoft Security, Compliance, and Identity
Sephiroth replied to Mark182's topic in Cloud Services
Sounds like a good offer! '����-������' Edit: That makes sense of the previous post... Copy/Pasting the text in OP results in the above... "SC-900" -
Depends on what you want the data for, but this is why I have a script that runs at startup; logon; logoff; and shutdown to log the action to a database. I can then parse the database to get fairly accurate usage stats for users and computers.
-
Similar to Julian, I use a powershell script that checks the current version and updates based on the latest installer in the directory. Once python is installed, the path variable is updated, then pip is updated and the specified modules installed. $Modules = @( 'matplotlib', 'pygame', 'sounddevice', 'scipy', 'wavio' ) $Exes = Get-ChildItem "\\example.org\Applications\Python\" -Filter "*.exe" $Arguments = "InstallAllUsers=1 PrependPath=1 /quiet" [Version]$HighestVersion = 0.0.0.0 Foreach ($Exe in $Exes) { [Version]$ExeVersion = $Exe.VersionInfo.FileVersion If ($HighestVersion -lt $ExeVersion) { $HighestVersion = $ExeVersion $Highest = $Exe } $InstallPath = $Highest.FullName } $CurrentVersions = @() $Currents = (Get-Package -ProviderName Programs -IncludeWindowsInstaller -Name "*Python*" -ErrorAction SilentlyContinue) | Where-Object {$_.Name -notlike "*Launcher*"} Foreach ($Current in $Currents) { $CurrentVersions += @($Current.Version) } Foreach ($CurrentVersion in $CurrentVersions) { If ($CurrentVersion -lt $HighestVersion) { $Uninstaller = $Exes | Where-Object {$_.VersionInfo.FileVersion -eq $CurrentVersion} $UninstallPath = $Uninstaller.FullName Start-Process -FilePath $UninstallPath -ArgumentList "/uninstall /quiet" -NoNewWindow -Wait } } $CurrentVersions = @() $Currents = (Get-Package -ProviderName Programs -IncludeWindowsInstaller -Name "*Python*" -ErrorAction SilentlyContinue) | Where-Object {$_.Name -notlike "*Launcher*"} Foreach ($Current in $Currents) { $CurrentVersions += @($Current.Version) } If ($Currents -eq $Null) { $Installed = $False } Else { $Installed = $True } If (!($Installed)) { Start-Process -FilePath $InstallPath -ArgumentList $Arguments -NoNewWindow -Wait Sleep -Seconds 5 $env:Path = [system.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [system.Environment]::GetEnvironmentVariable("Path","User") } Start-Process -FilePath "Python" -ArgumentList "-m pip install --upgrade pip" -NoNewWindow -Wait $InstallModules = "" Foreach ($Module in $Modules) { $InstallModules += " $Module" } Start-Process -FilePath "python" -ArgumentList "-m pip install $InstallModules" -NoNewWindow -Wait
-
Quite possibly, but what I have is heavily reliant on our use cases. As I said, I'm in the process of improving the UI and simplifying the dataset whilst cutting down on the processing that each computer does. I started with a very complex method, involving a script that continues to run, allowing for accurate usage of offline devices like laptops, and am trimming it down to what is necessary. I can share the basic form of the code to connect to and log to a database if that's helpful?
-
This is exactly why I do it through a SQL database. let custom code churn out datasets for me in the format that I need, without having to spend anything on a 3rd party product.
-
I deal with this by logging to a database with powershell logon/logoff scripts. The database can then be either parsed by powershell (or other scripting language of choice), exported to excel or read by a custom interface (I am in the process of rewriting the one I had to improve functionality).
-
Windows 11 Gpo settings and REG settings that might be useful
Sephiroth replied to Jaan's topic in Windows 11
I'd actually argue the opposite these days... but google's marketing department are very efficient. -
Windows 11 Gpo settings and REG settings that might be useful
Sephiroth replied to Jaan's topic in Windows 11
We're a google school. A lot of issues stem from people trying to sign into google services in edge and wondering why they have to authenticate so many times for everything. Also, as others have said, a single browser is cleaner. -
Windows 11 Gpo settings and REG settings that might be useful
Sephiroth replied to Jaan's topic in Windows 11
As I'm now looking at various options for our W11 builds, have you seen any quirks or issues in removing Edge? does it have to be updated for each edge version?
