![](/style/images/good.png)
![](/style/images/bad.png)
A quick PowerShell tip | Chris Miller's 3rd Blog
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.
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.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK