11

A quick PowerShell tip | Chris Miller's 3rd Blog

 2 years ago
source link: https://rajapet.com/2021/07/28/a-quick-powershell-tip/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

A quick PowerShell tip

I have a bunch of PowerShell functions that I stick in my $profile file. Simple stuff, things to make my day to day development work easier. With my sieve-like memory, I need a quick way to see the functions. So I wrote a script named “mine.ps1” and it’s basically a tiny help file.  It has stuff like this

write-host Commands -ForegroundColor White
write-host "get-guid-clipboard" -ForegroundColor Yellow
write-host "set-alias lsd get-by-date" -ForegroundColor Yellow
write-host "Set-Alias touch Set-FileTime" -ForegroundColor Yellow

In my $profile, I define those functions. They could (and should) be in a separate file, but I’m lazy. This is part of my PowerShell profile:

function Set-FileTime{
param(
[string[]]$paths,
[bool]$only_modification = $false,
[bool]$only_access = $false
)
begin {
function updateFileSystemInfo([System.IO.FileSystemInfo]$fsInfo) {
$datetime = get-date
if ( $only_access )
{
$fsInfo.LastAccessTime = $datetime
}
elseif ( $only_modification )
{
$fsInfo.LastWriteTime = $datetime
}
else
{
$fsInfo.CreationTime = $datetime
$fsInfo.LastWriteTime = $datetime
$fsInfo.LastAccessTime = $datetime
}
}
function touchExistingFile($arg) {
if ($arg -is [System.IO.FileSystemInfo]) {
updateFileSystemInfo($arg)
}
else {
$resolvedPaths = resolve-path $arg
foreach ($rpath in $resolvedPaths) {
if (test-path -type Container $rpath) {
$fsInfo = new-object System.IO.DirectoryInfo($rpath)
}
else {
$fsInfo = new-object System.IO.FileInfo($rpath)
}
updateFileSystemInfo($fsInfo)
}
}
}
function touchNewFile([string]$path) {
#$null > $path
Set-Content -Path $path -value $null;
}
}
process {
if ($_) {
if (test-path $_) {
touchExistingFile($_)
}
else {
touchNewFile($_)
}
}
}
end {
if ($paths) {
foreach ($path in $paths) {
if (test-path $path) {
touchExistingFile($path)
}
else {
touchNewFile($path)
}
}
}
}
}
function get-by-date {get-childitem | sort LastWriteTime }
function get-guid-clipboard { [guid]::NewGuid() | Set-Clipboard }
set-alias lsd get-by-date
Set-Alias touch Set-FileTime
Set-Alias -Name guidc -Value get-guid-clipboard -Description "Get a GUID and copy it to the clipboard"
function get-mine {. d:\\scripts\mine.ps1}
write-host "Type 'get-mine' for my local functions"
[System.Net.Dns]::GetHostByName($env:computerName).HostName.ToLower()

The touch functions came from the ss64.com site. I end by displaying the current machine name. When you remote into a box of boxes, it’s good to know where you currently are. Now when I fire up a new shell, I’ll see something like this:

PowerShell 7.1.3
Copyright (c) Microsoft Corporation.
Type 'help' to get help.
Type 'get-mine' for my local functions
uberbox
Loading personal and system profiles took 929ms.

Powershell tips

Post navigation

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Comment

Name *

Email *

Website

Notify me of follow-up comments by email.

Notify me of new posts by email.

This site uses Akismet to reduce spam. Learn how your comment data is processed.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK