Set a location to a Variable in PowerShell

12.3k views Asked by At

I'm very new to PowerShell, and I'm sure this is a simple question but I'm a little stumped. I'm trying to open a Folder, sort by LastWriteTime, and open the Folder at the top of the list. I want to store that in a variable so when I call the variable I can set my location to that variable. The problem I'm having is that when I call my variable, nothing happens:

$latest = Get-Childitem C:\Main | Sort LastWriteTime -Descending | Select -First 1 | Invoke-Item

How come I get an error when I try to 'Set-Location $latest'?

5

There are 5 answers

0
Petro Franko On

This worked for me:

$last = gci ./ | sort LastWriteTime | select -last 1
Set-Location ($last.FullName)
0
rovinos On

If you want to use a variable as the value for Set-Location then you should use it like this:

$variableName = whatever
Set-Location (Split-Path variableName)

Notice that I'm not using the $ sign.

0
Shay Levy On

Give this a try:

$first = Get-Childitem C:\Main | Sort-Object LastWriteTime -Descending | Select-Object -First 1
Set-Location (Split-Path $first.FullName)
2
johnshen64 On

You already invoke-item on what you got, and the default action was performed. the variable will just return the status of that action, not the item returned. If you remove the last pipe invoke-item, you may get what you want.

set-location needs a string, and powershell returns an object. so something like this may be what you want.

set-location "c:\Main\" + $lastest.name

0
Aaron Jensen On

I would use Tee-Object to set the variable $latest to the directory and also continue sending the directory object down the pipeline.

Get-Childitem C:\Main | 
    Sort LastWriteTime -Descending | 
    Select-Object -First 1 | 
    Tee-Object -Variable latest |
    Invoke-Item