Не думаю, что понимаю мотивацию выполнения SQL объединений на стороне клиента в коде PowerShell. Может быть, вам нужно добавить некоторые соображения для этого.
Но, не зная ничего другого об обстоятельствах, не будет ли намного проще позволить серверу БД вычислить эти значения?
$sql = '
SELECT
ts.TABLESPACE_NAME,
ts.BLOCK_SIZE,
ts.CONTENTS,
tsm.USED_SPACE,
tsm.TABLESPACE_SIZE,
tsm.USED_SPACE * ts.BLOCK_SIZE USED_SPACE_Bytes,
tsm.TABLESPACE_SIZE * ts.BLOCK_SIZE TABLESPACE_SIZE_Bytes,
/* casting to INT, otherwise Invoke-SqlQuery is unhappy */
CAST(ROUND(tsm.USED_SPACE / tsm.TABLESPACE_SIZE * 100) AS INT) TABLESPACE_Free_Percent
FROM
DBA_TABLESPACES ts
INNER JOIN DBA_TABLESPACE_USAGE_METRICS tsm ON tsm.TABLESPACE_NAME = ts.TABLESPACE_NAME
'
$tablespace_info = Invoke-SqlQuery -Query $sql -Stream
foreach ($row in $tablespace_info) {
$row.TABLESPACE_NAME
$row.CONTENTS
$row.BLOCK_SIZE
$row.USED_SPACE_Bytes
}