How to Change File Properties (ReadOnly, CreationTime etc.) Using PowerShell

Changing file properties is quite easy with PowerShell.


Remove ReadOnly attribute:

Set-ItemProperty -Path 'C:\Program Files\desktop.ini' -Name IsReadOnly -Value $false


Change CreationTime (90 days back in time):

Set-ItemProperty -Path 'C:\Program Files\desktop.ini' -Name CreationTime -Value ((Get-Date).AddDays(-90))




Create Event Source with PowerShell

To create a Event Source in PowerShell use this:

$Source = "MyEventSource"
if ([System.Diagnostics.EventLog]::SourceExists($Source) -eq $false {
  [System.Diagnostics.EventLog]::CreateEventSource($Source, "Application")

Get more info on CreateEventSource method here :


In PowerShell 2.0 this is even simpler:

$Source = "MyEventSource"
New-EventLog -LogName Application -Source $Source


Handling attributes with hyphens in PowerShell

Sometimes we need working with PowerShell objects which have attributes with hyphens. That can be a bit difficult as PowerShell assumes hyphens are used with operators and parameters.

Below is an example on how to get around this, and rename the attribute:



$Users = Get-AdUser -Filter * -Property "msDS-ResultantPSO" | Select name, @{Name="ResultantPSO";Expression={$_."msDS-ResultantPSO"}}



Enumerate COM classes using WMI


Quick and short way of enumerating COM classes is using the WMI class Win32_ClassicComClassSetting.



Get-WmiObject win32_ClassicComClassSetting | Select-Object ProgID | Group-Object ProgID | Select-Object Name | Sort-Object Name


Fun with Microsoft Agent and PowerShell

Show Merlin:

$agent = new-object -com Agent.Control.2
$agent.Connected = 1
$merlin = $agent.Characters.Character("Merlin")

List animations:



Activate animation:



Have Merlin tell when process was started:

Get-Process | select -First 10 | foreach {$merlin.Speak($_.ProcessName + " was started " + $_.StartTime) | out-null; Start-Sleep 5 }


Microsoft Agent is being deprecated and will not be included in future versions of the Windows operating system.