Skip to content

Commit 0e83a68

Browse files
jsturtevantmarosset
authored andcommitted
When using Powershell all strings must be passed as env vars
Signed-off-by: James Sturtevant <[email protected]> Co-authored-by: Mark Rossetti <[email protected]>
1 parent 7764ab9 commit 0e83a68

File tree

1 file changed

+47
-26
lines changed

1 file changed

+47
-26
lines changed

pkg/os/volume/api.go

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ func New() VolumeAPI {
6262
}
6363

6464
func getVolumeSize(volumeID string) (int64, error) {
65-
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" | Get-partition).Size", volumeID)
66-
out, err := utils.RunPowershellCmd(cmd)
65+
cmd := `(Get-Volume -UniqueId "$Env:volumeID" | Get-partition).Size`
66+
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
67+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
6768

6869
if err != nil || len(out) == 0 {
6970
return -1, fmt.Errorf("error getting size of the partition from mount. cmd %s, output: %s, error: %v", cmd, string(out), err)
@@ -98,8 +99,9 @@ func (VolumeAPI) ListVolumesOnDisk(diskNumber uint32, partitionNumber uint32) (v
9899

99100
// FormatVolume - Formats a volume with the NTFS format.
100101
func (VolumeAPI) FormatVolume(volumeID string) (err error) {
101-
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Format-Volume -FileSystem ntfs -Confirm:$false", volumeID)
102-
out, err := utils.RunPowershellCmd(cmd)
102+
cmd := `Get-Volume -UniqueId "$Env:volumeID" | Format-Volume -FileSystem ntfs -Confirm:$false`
103+
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
104+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
103105
if err != nil {
104106
return fmt.Errorf("error formatting volume. cmd: %s, output: %s, error: %v", cmd, string(out), err)
105107
}
@@ -114,8 +116,9 @@ func (VolumeAPI) WriteVolumeCache(volumeID string) (err error) {
114116

115117
// IsVolumeFormatted - Check if the volume is formatted with the pre specified filesystem(typically ntfs).
116118
func (VolumeAPI) IsVolumeFormatted(volumeID string) (bool, error) {
117-
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" -ErrorAction Stop).FileSystemType", volumeID)
118-
out, err := utils.RunPowershellCmd(cmd)
119+
cmd := `(Get-Volume -UniqueId "$Env:volumeID" -ErrorAction Stop).FileSystemType`
120+
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
121+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
119122
if err != nil {
120123
return false, fmt.Errorf("error checking if volume is formatted. cmd: %s, output: %s, error: %v", cmd, string(out), err)
121124
}
@@ -128,8 +131,12 @@ func (VolumeAPI) IsVolumeFormatted(volumeID string) (bool, error) {
128131

129132
// MountVolume - mounts a volume to a path. This is done using the Add-PartitionAccessPath for presenting the volume via a path.
130133
func (VolumeAPI) MountVolume(volumeID, path string) error {
131-
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-Partition | Add-PartitionAccessPath -AccessPath %s", volumeID, path)
132-
out, err := utils.RunPowershellCmd(cmd)
134+
cmd := `Get-Volume -UniqueId "$Env:volumeID" | Get-Partition | Add-PartitionAccessPath -AccessPath $Env:mountpath`
135+
cmdEnv := []string{}
136+
cmdEnv = append(cmdEnv, fmt.Sprintf("volumeID=%s", volumeID))
137+
cmdEnv = append(cmdEnv, fmt.Sprintf("mountpath=%s", path))
138+
out, err := utils.RunPowershellCmd(cmd, cmdEnv...)
139+
133140
if err != nil {
134141
return fmt.Errorf("error mount volume to path. cmd: %s, output: %s, error: %v", cmd, string(out), err)
135142
}
@@ -141,8 +148,13 @@ func (VolumeAPI) UnmountVolume(volumeID, path string) error {
141148
if err := writeCache(volumeID); err != nil {
142149
return err
143150
}
144-
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-Partition | Remove-PartitionAccessPath -AccessPath %s", volumeID, path)
145-
out, err := utils.RunPowershellCmd(cmd)
151+
152+
cmd := `Get-Volume -UniqueId "$Env:volumeID" | Get-Partition | Remove-PartitionAccessPath -AccessPath $Env:mountpath`
153+
cmdEnv := []string{}
154+
cmdEnv = append(cmdEnv, fmt.Sprintf("volumeID=%s", volumeID))
155+
cmdEnv = append(cmdEnv, fmt.Sprintf("mountpath=%s", path))
156+
out, err := utils.RunPowershellCmd(cmd, cmdEnv...)
157+
146158
if err != nil {
147159
return fmt.Errorf("error getting driver letter to mount volume. cmd: %s, output: %s,error: %v", cmd, string(out), err)
148160
}
@@ -158,8 +170,9 @@ func (VolumeAPI) ResizeVolume(volumeID string, size int64) error {
158170
var finalSize int64
159171
var outString string
160172
if size == 0 {
161-
cmd = fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-partition | Get-PartitionSupportedSize | Select SizeMax | ConvertTo-Json", volumeID)
162-
out, err := utils.RunPowershellCmd(cmd)
173+
cmd = `Get-Volume -UniqueId "$Env:volumeID" | Get-partition | Get-PartitionSupportedSize | Select SizeMax | ConvertTo-Json`
174+
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
175+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
163176

164177
if err != nil || len(out) == 0 {
165178
return fmt.Errorf("error getting sizemin,sizemax from mount. cmd: %s, output: %s, error: %v", cmd, string(out), err)
@@ -190,8 +203,10 @@ func (VolumeAPI) ResizeVolume(volumeID string, size int64) error {
190203
return nil
191204
}
192205

193-
cmd = fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-Partition | Resize-Partition -Size %d", volumeID, finalSize)
194-
out, err = utils.RunPowershellCmd(cmd)
206+
cmd = fmt.Sprintf(`Get-Volume -UniqueId "$Env:volumeID" | Get-Partition | Resize-Partition -Size %d`, finalSize)
207+
cmdEnv := []string{}
208+
cmdEnv = append(cmdEnv, fmt.Sprintf("volumeID=%s", volumeID))
209+
out, err = utils.RunPowershellCmd(cmd, cmdEnv...)
195210
if err != nil {
196211
return fmt.Errorf("error resizing volume. cmd: %s, output: %s size:%v, finalSize %v, error: %v", cmd, string(out), size, finalSize, err)
197212
}
@@ -201,8 +216,9 @@ func (VolumeAPI) ResizeVolume(volumeID string, size int64) error {
201216
// GetVolumeStats - retrieves the volume stats for a given volume
202217
func (VolumeAPI) GetVolumeStats(volumeID string) (int64, int64, error) {
203218
// get the size and sizeRemaining for the volume
204-
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" | Select SizeRemaining,Size) | ConvertTo-Json", volumeID)
205-
out, err := utils.RunPowershellCmd(cmd)
219+
cmd := `(Get-Volume -UniqueId "$Env:volumeID" | Select SizeRemaining,Size) | ConvertTo-Json`
220+
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
221+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
206222

207223
if err != nil {
208224
return -1, -1, fmt.Errorf("error getting capacity and used size of volume. cmd: %s, output: %s, error: %v", cmd, string(out), err)
@@ -227,8 +243,9 @@ func (VolumeAPI) GetVolumeStats(volumeID string) (int64, int64, error) {
227243
// GetDiskNumberFromVolumeID - gets the disk number where the volume is.
228244
func (VolumeAPI) GetDiskNumberFromVolumeID(volumeID string) (uint32, error) {
229245
// get the size and sizeRemaining for the volume
230-
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" | Get-Partition).DiskNumber", volumeID)
231-
out, err := utils.RunPowershellCmd(cmd)
246+
cmd := `(Get-Volume -UniqueId "$Env:volumeID" | Get-Partition).DiskNumber`
247+
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
248+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
232249

233250
if err != nil || len(out) == 0 {
234251
return 0, fmt.Errorf("error getting disk number. cmd: %s, output: %s, error: %v", cmd, string(out), err)
@@ -261,8 +278,9 @@ func (VolumeAPI) GetVolumeIDFromTargetPath(mount string) (string, error) {
261278
}
262279

263280
func getTarget(mount string) (string, error) {
264-
cmd := fmt.Sprintf("(Get-Item -Path %s).Target", mount)
265-
out, err := utils.RunPowershellCmd(cmd)
281+
cmd := `(Get-Item -Path $Env:mountpath).Target`
282+
cmdEnv := fmt.Sprintf("mountpath=%s", mount)
283+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
266284
if err != nil || len(out) == 0 {
267285
return "", fmt.Errorf("error getting volume from mount. cmd: %s, output: %s, error: %v", cmd, string(out), err)
268286
}
@@ -352,8 +370,9 @@ func ensureVolumePrefix(volume string) string {
352370

353371
// dereferenceSymlink dereferences the symlink `path` and returns the stdout.
354372
func dereferenceSymlink(path string) (string, error) {
355-
cmd := fmt.Sprintf(`(Get-Item -Path %s).Target`, path)
356-
out, err := utils.RunPowershellCmd(cmd)
373+
cmd := `(Get-Item -Path $Env:linkpath).Target`
374+
cmdEnv := fmt.Sprintf("linkpath=%s", path)
375+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
357376
if err != nil {
358377
return "", err
359378
}
@@ -368,8 +387,9 @@ func getVolumeForDriveLetter(path string) (string, error) {
368387
return "", fmt.Errorf("The path=%s is not a valid DriverLetter", path)
369388
}
370389

371-
cmd := fmt.Sprintf(`(Get-Partition -DriveLetter %s | Get-Volume).UniqueId`, path)
372-
out, err := utils.RunPowershellCmd(cmd)
390+
cmd := `(Get-Partition -DriveLetter $Env:drivepath | Get-Volume).UniqueId`
391+
cmdEnv := fmt.Sprintf("drivepath=%s", path)
392+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
373393
if err != nil {
374394
return "", err
375395
}
@@ -379,8 +399,9 @@ func getVolumeForDriveLetter(path string) (string, error) {
379399
}
380400

381401
func writeCache(volumeID string) error {
382-
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Write-Volumecache", volumeID)
383-
out, err := utils.RunPowershellCmd(cmd)
402+
cmd := `Get-Volume -UniqueId "$Env:volumeID" | Write-Volumecache`
403+
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
404+
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
384405
if err != nil {
385406
return fmt.Errorf("error writing volume cache. cmd: %s, output: %s, error: %v", cmd, string(out), err)
386407
}

0 commit comments

Comments
 (0)