lib/winrm-fs/file_manager.rb in winrm-fs-0.4.3 vs lib/winrm-fs/file_manager.rb in winrm-fs-1.0.0
- old
+ new
@@ -21,51 +21,51 @@
module WinRM
module FS
# Perform file transfer operations between a local machine and winrm endpoint
class FileManager
# Creates a new FileManager instance
- # @param [WinRMWebService] WinRM web service client
- def initialize(service)
- @service = service
- @logger = service.logger
+ # @param [WinRM::Connection] WinRM web connection client
+ def initialize(connection)
+ @connection = connection
+ @logger = connection.logger
end
# Gets the MD5 checksum of the specified file if it exists,
# otherwise ''
# @param [String] The remote file path
def checksum(path)
@logger.debug("checksum: #{path}")
script = WinRM::FS::Scripts.render('checksum', path: path)
- @service.create_executor { |e| e.run_powershell_script(script).stdout.chomp }
+ @connection.shell(:powershell) { |e| e.run(script).stdout.chomp }
end
# Create the specifed directory recursively
# @param [String] The remote dir to create
# @return [Boolean] True if successful, otherwise false
def create_dir(path)
@logger.debug("create_dir: #{path}")
script = WinRM::FS::Scripts.render('create_dir', path: path)
- @service.create_executor { |e| e.run_powershell_script(script)[:exitcode] == 0 }
+ @connection.shell(:powershell) { |e| e.run(script).exitcode == 0 }
end
# Deletes the file or directory at the specified path
# @param [String] The path to remove
# @return [Boolean] True if successful, otherwise False
def delete(path)
@logger.debug("deleting: #{path}")
script = WinRM::FS::Scripts.render('delete', path: path)
- @service.create_executor { |e| e.run_powershell_script(script)[:exitcode] == 0 }
+ @connection.shell(:powershell) { |e| e.run(script).exitcode == 0 }
end
# Downloads the specified remote file to the specified local path
# @param [String] The full path on the remote machine
# @param [String] The full path to write the file to locally
def download(remote_path, local_path)
@logger.debug("downloading: #{remote_path} -> #{local_path}")
script = WinRM::FS::Scripts.render('download', path: remote_path)
- output = @service.create_executor { |e| e.run_powershell_script(script) }
- return false if output[:exitcode] != 0
+ output = @connection.shell(:powershell) { |e| e.run(script) }
+ return false if output.exitcode != 0
contents = output.stdout.gsub('\n\r', '')
out = Base64.decode64(contents)
IO.binwrite(local_path, out)
true
end
@@ -74,19 +74,19 @@
# @param [String] The full path to the directory or file
# @return [Boolean] True if the file/dir exists, otherwise false.
def exists?(path)
@logger.debug("exists?: #{path}")
script = WinRM::FS::Scripts.render('exists', path: path)
- @service.create_executor { |e| e.run_powershell_script(script)[:exitcode] == 0 }
+ @connection.shell(:powershell) { |e| e.run(script).exitcode == 0 }
end
# Gets the current user's TEMP directory on the remote system, for example
# 'C:/Windows/Temp'
# @return [String] Full path to the temp directory
def temp_dir
@guest_temp ||= begin
- (@service.create_executor { |e| e.run_cmd('echo %TEMP%') }).stdout.chomp.gsub('\\', '/')
+ (@connection.shell(:powershell) { |e| e.run('$env:TEMP') }).stdout.chomp.gsub('\\', '/')
end
end
# Upload one or more local files and directories to a remote directory
# @example copy a single file to a winrm endpoint
@@ -105,11 +105,11 @@
# @yieldparam [Fixnum] The total number of bytes to be copied
# @yieldparam [String] Path of file being copied
# @yieldparam [String] Target path on the winrm endpoint
# @return [Fixnum] The total number of bytes copied
def upload(local_path, remote_path, &block)
- @service.create_executor do |executor|
- file_transporter ||= WinRM::FS::Core::FileTransporter.new(executor)
+ @connection.shell(:powershell) do |shell|
+ file_transporter ||= WinRM::FS::Core::FileTransporter.new(shell)
file_transporter.upload(local_path, remote_path, &block)[0]
end
end
end
end