public Arguments(IEnumerable<string> args) { ForceNative = !Platform.SupportsRawAccess(); //default this to whether or not the platform supports raw access var argEnum = args.GetEnumerator(); while (!HelpRequested && argEnum.MoveNext()) { switch (argEnum.Current) { case "--help": case "-h": case "/?": case "--version": HelpRequested = true; argEnum.GetArgumentParameter(ref HelpTopic); break; case "-od": OutputPath = argEnum.GetArgumentParameter(); break; case "-of": OutputFileName = argEnum.GetArgumentParameter(); break; case "-u": UserName = argEnum.GetArgumentParameter(); break; case "-p": UserPassword = argEnum.GetArgumentParameter(); break; case "-s": SFTPServer = argEnum.GetArgumentParameter(); break; case "-c": CollectionFilePath = argEnum.GetArgumentParameter(); break; case "-zp": ZipPassword = argEnum.GetArgumentParameter(); break; case "-zl": ZipLevel = argEnum.GetArgumentParameter(); break; case "--no-usnjrnl": Usnjrnl = false; break; case "--force-native": if (ForceNative) { Console.WriteLine("Warning: This platform only supports native reads, --force-native has no effect."); } ForceNative = true; break; case "--dry-run": DryRun = true; break; case "-o": throw new ArgumentException("-o is no longer supported, please use -od instead."); default: CollectionFiles = CollectionFiles ?? new List<string>(); CollectionFiles.Add(argEnum.Current); break; } } if (!HelpRequested) { var sftpArgs = new[] { UserName, UserPassword, SFTPServer }; UseSftp = sftpArgs.Any(arg => !string.IsNullOrEmpty(arg)); if (UseSftp && sftpArgs.Any(string.IsNullOrEmpty)) { throw new ArgumentException("The flags -u, -p, and -s must all have values to continue. Please try again."); } if (DryRun) { //Disable SFTP in a dry run. UseSftp = false; } } }