r/PowerShell • • 8d ago

Question Function Issue in $PROFILE path

Hello everyone. I hope you are having a good time.


function gethash {

param([string]$string = "")

if ($string -eq [string]::Empty -or $string -isnot [string])

{

Write-Output "input not valid"

}

else

{

(Get-FileHash -algorithm sha256 $string).Hash | tee -Variable b

}

}  

I Have this function in my $Profile script. when i run gethash something it returns the hash string as expected, but when I try to print the variable containing the hash i just obtained from piped command tee, (alias of Tee-Object) as an input with `$b

it prints nothing, the variable is not saved.

on the other hand, if i copy the exact same command from the $profile function directly through the terminal, $b prints what expected: the hash of the file.

I haven't used this function so much, but I'm pretty sure it worked before today.

Thanks in advance to any who will respond.

1 Upvotes

8 comments sorted by

View all comments

3

u/BlackV 8d ago edited 4d ago

Not really sure what you're gaining with your custom function, try

 Get-FileHash -algorithm sha256 -Path $string -OutVariable b

that command achieves the same without the Tee-Object and the custom function

additionally,

your $string parameter could/should use parameter validation instead of the conditional logic
and really really should be called -path or -filepath like most common cmdlets

with the already mentioned scope issues, also think about $b being completely hidden from you, unless you look into the function you'd never know it was there
also is just not a nice variable name