Michael Morgan
Michael Morgan

Reputation: 21

Save powershell script after entering details for read-host

Example:

$nameofpath = read-host "enter path"
get-services | export-csv "$nameofpath"

I want a script so after entering a path such as c:\files\test.txt in the example above, it will save a script with:

get-services | export-csv "c:\files\test.txt"

... so I could go to that file click it and it will run.

At the moment I have an draft script like this but if I know how to do the first example I should hopefully be able to do the same for that

Upvotes: 1

Views: 319

Answers (2)

DisplayName
DisplayName

Reputation: 1026

This looks amateur but works as expected

$path = [Microsoft.VisualBasic.Interaction]::InputBox("Enter path") 
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null  
 get-service | export-csv -path $path\services.csv # original command 
$Command="get-service | export-csv -path $path\services.csv" # same copy here to save 
  $command |Out-File "D:\exportservice.ps1" # where you want the file to be saved to run later

Upvotes: 1

E.V.I.L.
E.V.I.L.

Reputation: 2166

You'd either need to change the script that you're running, or query some other text file. If there is anything in the text file, use that; otherwise, prompt for the value. Here's an example of how you could change the script you're running using the $PSCommandPath (it's an automatic variable that contains the full path and file name of the script that is being run) variable:

$Foo = $null
#If $Foo is $null prompt for value then write that value to the script.
if($Foo -eq $null){
    $Foo = Read-Host "Foo"
    #Need to becarful not to match this line
    $NewScript = Get-Content $PSCommandPath | ForEach-Object {$_ -replace '^\$Foo = \$null$',"`$Foo = '$Foo'"}
    $NewScript | Out-File $PSCommandPath -Force
}
Write-Host "Foo $Foo"

Hope this helps.

Upvotes: 1

Related Questions